Обработка чанков в Spring Batch эффективно ограничивает вас одним шагом? - PullRequest
0 голосов
/ 01 марта 2012

Я пишу приложение Spring Batch для выполнения следующих действий: Существует входная таблица (PostgreSQL DB), в которую кто-то постоянно добавляет строки - это в основном добавляемые рабочие элементы. Для каждой из этих строк мне нужно получить больше данных из другой БД, выполнить некоторую обработку, а затем выполнить выходную транзакцию, которая может быть несколькими запросами SQL, касающимися нескольких таблиц (это должна быть одна транзакция по соображениям согласованности).

Теперь часть между входом и выходом должна быть модульной - в ней уже есть 3-4 логически разделенных элемента, и в будущем их будет больше. Этот поток не обязательно должен быть линейным - то, какая обработка выполняется дальше, может зависеть от результата предыдущего. Короче говоря, это в основном похоже на поток, который вы можете настроить, используя шаги внутри задания.

Моя основная проблема заключается в следующем: обычно один шаг обработки чанка имеет и ItemReader, и ItemWriter, то есть ввод для вывода за один шаг. Итак, я должен включить все этапы обработки как часть одного ItemProcessor? Как сделать отдельный ItemProcessor рабочим процессом с сохранением состояния?

Другой вариант - сделать каждый шаг реализацией тасклета и написать себе два тасклета, которые будут вести себя как ItemReader и ItemWriter.

Есть предложения?

1 Ответ

0 голосов
/ 06 марта 2012

Нашел ответ - да, вы фактически ограничены одним шагом.Но:

1) Для линейных рабочих процессов вы можете «связать» итераторы-процессоры, то есть создать составной итератор, для которого вы можете предоставить все итераторы, которые выполняют реальную работу через applicationContext.xml.Композитный itemprocessor просто запускает их один за другим.Это то, чем я сейчас занимаюсь.

2) Вы всегда можете создать внутренний подпоток как отдельный рабочий процесс пружинного пакета и вызвать его через код в итерато-процессоре, похожем на составной итератор-процессор выше.Я мог бы перейти к этому в будущем.

...