JdbcMetadataStore -bad SQL грамматика - PullRequest
0 голосов
/ 19 января 2020

Я хочу иметь постоянное хранилище метаданных, которое будет использоваться адаптером ftp. Я создал bean-компонент FtpPersistentAcceptOnceFileListFilter для автоматического подключения и использования в своем определении потока следующим образом:

    @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)

Я использую хранилище данных по умолчанию + База данных H2 предоставлена ​​весенней загрузкой.

Что не так?

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Я исправил это, сделав JdbcMetadataStore bean-компонентом, поэтому метод инициализации называется ...

    @Bean
    fun ftpPersistentAcceptOnceFileListFilter(jdbcMetadataStore: JdbcMetadataStore) =
            FtpPersistentAcceptOnceFileListFilter(jdbcMetadataStore, "inboundFile")

    @Bean
    fun jdbcMetadataStore(dataSource: DataSource) = JdbcMetadataStore(dataSource)
0 голосов
/ 19 января 2020

Привет из вашей трассировки стека. Я видел эту проблему:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...