Как запустить пакетное задание при получении входного файла?

У нас есть Spring4 и Spring Batch 3, и наше приложение использует файлы CSV в качестве входного файла. В настоящее время мы запускаем задания вручную из командной строки, используя CommandLineJobRunner с параметрами, включая имя файла для обработки.

Я хочу запустить задание для асинхронной обработки, как только входной файл появится в отслеживаемом каталоге. Как мы можем сделать это?


person JamesD    schedule 23.04.2018    source источник


Ответы (2)


Вы можете использовать java.nio.file.WatchService для мониторинга каталога для файла. Как только файл появится, вы можете начать (или запустить задание для асинхронной обработки) фактическую обработку.

Вы также можете использовать FileReadingMessageSource.WatchServiceDirectoryScanner из Spring Integration (https://docs.spring.io/spring-integration/reference/html/files.html#watch-service-directory-scanner)

Сравнение примечаний к выпуску Spring Batch https://github.com/spring-projects/spring-batch/releases для интеграции Spring https://github.com/spring-projects/spring-integration/releases похоже, что Spring Integration выпускается чаще. Он также имеет больше функций и точек интеграции.

В этом случае использование Spring Integration выглядит излишним, если вам просто нужно посмотреть каталог для файла.

person Bartosz Bilicki    schedule 23.04.2018

Я бы рекомендовал использовать мощную комбинацию Spring Batch с Spring Integration. Например, вы можете использовать FileInboundChannelAdapter из Spring Integration для мониторинга каталога и запускать пакетное задание Spring, как только поступит входной файл.

Пример кода для этого типичного варианта использования приведен в справочной документации Spring Batch здесь: https://docs.spring.io/spring-batch/4.0.x/reference/html/spring-batch-Integration.html#launching-batch-jobs-through-messages

Надеюсь, это поможет.

person Mahmoud Ben Hassine    schedule 23.04.2018