Пружинно-пакетная цепочка обработчик и запись составных элементов

#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   )