#spring-batch
Вопрос:
Я должен настроить свои потоки пакетных заданий следующим образом.
Устройство чтения XML-файлов — > Обработчик элементов № 1 (Элемент обработки из исходного XML-файла) — > > Обработчик элементов № 2 (Элемент обработки из результата процессора № 1) — > > > Средство записи элементов № 1 (Запись элемента из процессора № 1) — > > > > Средство записи элементов № 2 (Запись элемента из процессора № 2)
Мой пользовательский процессор выглядит так
public class MyCompositeProcessor implements ItemProcessor<MySource, MyCompositeResult> {
@Override
public MyCompositeResult process(MySource item) throws Exception {
MyResult1 result1 = myProcessor1.process(item);
MyResult2 result2 = myProcessor2.process(result1);
return MyCompositeResult(result1, result2);
}
}
public class MyCompositeWriter implements ItemWriter<MyCompositeResult> {
@Override
public void write(List<? extends MyCompositeResult> items) throws Exception {
myWriter1.write(item.getResult1());
myWriter2.write(item.getResult2());
}
}
Это хороший подход? Я видел несколько примеров CompositeProcessor, CompositeWriter, но ни один из них не подходит для моего случая.
Заранее спасибо.
Ответ №1:
Если я правильно понимаю, ваше требование выглядит следующим образом:
item reader → item processor 1 → item processor 2
↓ ↓
item writer 1 item writer 2
Маршрут обработчика/записи составных элементов не будет работать в вашем случае, потому что это будет похоже:
item reader → composite item processor → composite item writer
(processor 1 → processor 2) (writer 1 → writer 2)
а это не то, чего ты хочешь. Ваши требования являются конкретными, и вам потребуется пользовательская ChunkProcessor
реализация, в частности, составной процессор блоков:
item reader → chunk processor 1 → chunk processor 2
(item processor 1) (item processor 2)
( ↓ ) ( ↓ )
(item writer 1 ) (item writer 2 )