Правильный объем для многопоточных пакетных работ весной - PullRequest
1 голос
/ 10 апреля 2020

Я полагаю, что у меня есть проблема с областью видимости.

Код проекта для весенней партии можно найти здесь : https://github.com/ben467834/spring-batch-project-01

Объяснение проекта:

Цель - обработать любой входящий файл (на диске), включая метаданные (которые хранятся в базе данных SQL). Для этого у меня есть два тасклета (FileReservation и FileProcessorTask), которые являются шагами во всеобъемлющих «рабочих» заданиях. Они ждут события, чтобы начать свою работу. Есть несколько потоков, связанных с заданиями для параллелизма. Тасклет FileReservation отправляет fileId в FileProcessorTask с использованием контекста задания.

Отдельное задание (которое выполняется бесконечно) проверяет метаданные нового файла записи данных в базе данных и при обнаружении новых записей «пробуждает» тасклеты FileReservationTask, используя опубликованное событие.

При текущей конфигурации второй шаг в задании может получить нулевое сообщение при пробуждении тасклетов FileReservation.

Если вы раскомментируете код в BatchConfiguration , вы увидите, что он работает, когда у нас есть отдельные экземпляры bean-компонентов.

Любые указатели приветствуются.

Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Опрос папки для новых файлов не подходит для пакетного задания. Поэтому использование Spring Batch job ( filePollingJob ) не очень хорошая идея IMO.

Любые указатели приветствуются.

Опрос папки для Новые файлы и запуск задания для каждого входящего файла - это типичный пример использования, который может быть реализован с использованием java.nio.file.WatchService или FileInboundChannelAdapter из интеграции Spring. См. Как запустить пакетное задание при поступлении входного файла? для получения более подробной информации.

...