Spring Integration Хранилище метаданных JDBC

Я использую Spring Integration для чтения файлов FileReadingMessageSource, и чтобы один и тот же файл не читался дважды (или другие параллельные приложения также читают его), я использую FileSystemPersistentAcceptOnceFileListFilter.

Все работает хорошо, сохраняется состояние файла в БД (MySQL). Проблема в том, что когда я пытаюсь дважды прочитать один и тот же файл, я получаю исключение:

org.springframework.core.convert.support.DefaultConversionService.getSharedInstance()Lorg/springframework/core/convert/ConversionService;

Есть кто сталкивался с таким же? Спасибо!

ПОДРОБНОЕ ИСКЛЮЧЕНИЕ:

SEVERE: java.lang.NoSuchMethodError: org.springframework.core.convert.support.DefaultConversionService.getSharedInstance()Lorg/springframework/core/convert/ConversionService;
    at org.springframework.jdbc.core.SingleColumnRowMapper.<init>(SingleColumnRowMapper.java:53)
    at org.springframework.jdbc.core.JdbcTemplate.getSingleColumnRowMapper(JdbcTemplate.java:1291)
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:797)
    at org.springframework.integration.jdbc.metadata.JdbcMetadataStore.putIfAbsent(JdbcMetadataStore.java:134)
    at org.springframework.integration.file.filters.AbstractPersistentAcceptOnceFileListFilter.accept(AbstractPersistentAcceptOnceFileListFilter.java:77)
    at org.springframework.integration.file.filters.AbstractFileListFilter.filterFiles(AbstractFileListFilter.java:40)
    at org.springframework.integration.file.filters.CompositeFileListFilter.filterFiles(CompositeFileListFilter.java:108)
    at org.springframework.integration.file.DefaultDirectoryScanner.listFiles(DefaultDirectoryScanner.java:86)
    at org.springframework.integration.file.FileReadingMessageSource.scanInputDirectory(FileReadingMessageSource.java:293)
    at org.springframework.integration.file.FileReadingMessageSource.receive(FileReadingMessageSource.java:272)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:175)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:224)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:57)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:176)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:173)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:330)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:324)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:299)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.base/java.lang.Thread.run(Thread.java:844)
0
0
1 354
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

java.lang.NoSuchMethodError: org.springframework.core.convert.support.DefaultConversionService.getSharedInstance()Lorg/springframework/core/convert/ConversionService; означает, что вы используете несовместимые версии Spring Integration и Spring Framework. Для Spring Integration вы должны просто полагаться на транзитивные зависимости. Или даже лучше просто использовать управление зависимостями Spring Boot.

Спасибо, @Artem, я вижу, ты прав. Я использую WatchServiceDirectoryScanner для отслеживания новых поступающих файлов, но когда я изменил версию с 4 на 5, чтобы использовать JdbcMetadataStore, WatchServiceDirectoryScanner в любом случае не имеет права. Я что-то пропустил?

Eddy Bayonne 04.06.2018 23:57

это все хорошо. Я не видел, чтобы этот класс устарел в последней версии. В любом случае спасибо.

Eddy Bayonne 05.06.2018 14:57
  • Да, у меня тоже был проблема зависимости. Версии противоречили друг другу, когда я увидел список библиотек в каталоге проекта.
  • Я использовал Spring-Security (4.2.5) вместе со Spring framework (4.2.5) в моем проекте.
  • Maven загружал "весна-jdbc" и "Spring-TX" зависимости (4.3.15) версии библиотеки в build.
    Остальные все зависимости были 4.2.5 по умолчанию.

  • Итак, я добавил зависимость maven от"spring-jdbc" в (4.2.5) вручную в pom.xml, что устранило проблему.

Другие вопросы по теме