我想让ftp适配器使用持久元数据存储。我创建了FtpPersistentAcceptOnceFileListFilter bean以便自动处理并在流定义中使用,如下所示:
@Bean
fun ftpPersistentAcceptOnceFileListFilter (dataSource: DataSource): FtpPersistentAcceptOnceFileListFilter {
return FtpPersistentAcceptOnceFileListFilter(JdbcMetadataStore(dataSource), "clientOrderfile")
}
当我运行这个应用程序时,我反复得到
2020-01-19 12:15:39.291 ERROR 5112 --- [ask-scheduler-4] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessagingException: Problem occurred while synchronizing 'order' to local directory; nested exception is org.springframework.messaging.MessagingException: Failed to execute on session; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO %sMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %sMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO %[*]SMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %SMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0"; expected "identifier"; SQL statement:
INSERT INTO %sMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %sMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0 [42001-200]
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:355)
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:265)
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:66)
at org.springframework.integration.endpoint.AbstractFetchLimitingMessageSource.doReceive(AbstractFetchLimitingMessageSource.java:45)
at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:167)
at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:250)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:359)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.pollForMessage(AbstractPollingEndpoint.java:328)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$1(AbstractPollingEndpoint.java:275)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$2(AbstractPollingEndpoint.java:272)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我使用的是由spring提供的默认数据存储+ H2数据库。
出什么事了?
发布于 2020-01-19 11:49:35
我通过使JdbcMetadataStore成为一个bean来修正它,所以初始化方法被称为.
@Bean
fun ftpPersistentAcceptOnceFileListFilter(jdbcMetadataStore: JdbcMetadataStore) =
FtpPersistentAcceptOnceFileListFilter(jdbcMetadataStore, "inboundFile")
@Bean
fun jdbcMetadataStore(dataSource: DataSource) = JdbcMetadataStore(dataSource)
发布于 2020-01-19 11:40:50
从您的堆栈跟踪中我看到了以下问题:
Syntax error in SQL statement
"INSERT INTO %[*]SMETADATA_STORE(METADATA_KEY,
METADATA_VALUE, REGION) SELECT ?, ?, ?
FROM %SMETADATA_STORE
WHERE METADATA_KEY=? AND REGION=?
HAVING COUNT(*)=0"; expected "identifier";
似乎没有正确初始化表参见this post
https://stackoverflow.com/questions/59809620
复制相似问题