Как читать файлы, созданные в удаленном месте, обрабатывать и перемещать в другое место с помощью пакета Spring?
Может ли кто-нибудь предложить подход, которому мне нужно следовать, чтобы выполнить приведенное ниже требование?
Задний план:
Существует удаленное расположение, например "// имя_сервера / некоторая папка / некоторый файл" . Некоторые файлы будут генерироваться непрерывно каждую секунду или минуту в удаленном месте.
Приложение Spring boot должно постоянно проверять наличие новых файлов, генерируемых в удаленном месте (каким-либо планировщиком).
Если файлы доступны, мне нужно прочитать от самого старого до последнего файла один за другим и обработать их, чтобы сохранить в базе данных.
После обработки конкретный файл необходимо удалить из существующего удаленного местоположения и переместить в другую папку удаленного местоположения.
На мой взгляд:
Используя пакет spring, мы можем читать по одному файлу за раз. но как мы можем динамически прочитать самый старый файл?
Как справиться со сценарием, например: если мой пакет обрабатывает, один из файлов все еще обрабатывается. если расписание снова запустит задание, есть шанс выбрать тот же файл для обработки.
Оцените ваше решение и лучшее предложение :)
1 ответ
Опрос каталога и запуск задания для каждого входящего файла - это распространенный шаблон, который может быть достигнут с помощью комбинации Spring Batch и Spring Integration. Вы можете найти подробное описание того, как реализовать этот шаблон, в разделе « Запуск пакетных заданий через сообщения » справочной документации.
Используя пакет spring, мы можем читать по одному файлу за раз. но как мы можем динамически прочитать самый старый файл?
Это зависит от того, как вы решите создавать рабочие места. Если вы решите запускать отдельное задание для каждого файла, то код, запускающий задания, может сортировать файлы по мере необходимости и запускать задания последовательно в правильном порядке. Если вы решите запустить одно задание для всех файлов с
MultiResourceItemReader
например, тогда вы можете предоставить
Comparator
который сортирует файлы по мере необходимости, см.
MultiResourceItemReader#setComparator
.
Как справиться со сценарием, например: если мой пакет обрабатывает, один из файлов все еще обрабатывается. если расписание снова запустит задание, есть шанс выбрать тот же файл для обработки.
Это зависит от инструмента планирования, который вы используете, то есть от того, поддерживает ли он одновременное выполнение заданий или нет и т. Д. Шаблон опроса каталога и помещения запросов заданий в очередь решит эту проблему по дизайну, если файл, для которого
JobLaunchRequest
был успешно отправлен в очередь перемещен (повторно) из удаленного каталога (т.е. последующий опрос не увидит его и не создаст для него дублирующий запрос).