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

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

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

2 ответа

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

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

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

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

Я бы порекомендовал использовать мощную комбинацию 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

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

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