Я пишу приложение Spring Batch для выполнения следующих действий: Существует входная таблица (PostgreSQL DB), в которую кто-то постоянно добавляет строки - это в основном добавляемые рабочие элементы. Для каждой из этих строк мне нужно получить больше данных из другой БД, выполнить некоторую обработку, а затем выполнить выходную транзакцию, которая может быть несколькими запросами SQL, касающимися нескольких таблиц (это должна быть одна транзакция по соображениям согласованности).
Теперь часть между входом и выходом должна быть модульной - в ней уже есть 3-4 логически разделенных элемента, и в будущем их будет больше. Этот поток не обязательно должен быть линейным - то, какая обработка выполняется дальше, может зависеть от результата предыдущего. Короче говоря, это в основном похоже на поток, который вы можете настроить, используя шаги внутри задания.
Моя основная проблема заключается в следующем: обычно один шаг обработки чанка имеет и ItemReader, и ItemWriter, то есть ввод для вывода за один шаг. Итак, я должен включить все этапы обработки как часть одного ItemProcessor? Как сделать отдельный ItemProcessor рабочим процессом с сохранением состояния?
Другой вариант - сделать каждый шаг реализацией тасклета и написать себе два тасклета, которые будут вести себя как ItemReader и ItemWriter.
Есть предложения?