Как запустить пакетное задание при поступлении входного файла?
У нас есть 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
Надеюсь, это поможет.