Пружинная пакетная запись в разные таблицы условно с ItemWriter (ItemProcessor выводит в Table_A в случае успеха или Table_B в случае неудачи)

Я читаю из исходной таблицы (используя JpaPagingItemReader) и перехожу к ItemProcessor. Мое требование: если Item обрабатывается успешно, он должен записать в TABLE_A, а если обработка не удалась, записать в TABLE_B. Я получил это работает, но я не чувствую это как хороший способ. Моя текущая реализация

// my processor
public class MyItemProcessor implements ItemProcessor<SourceEntity, BaseOutputEntity>{

    @Override
    public BaseOutputEntity process(SourceEntity input) {
       // NOTE: EntityA, EntityB both extend BaseOutputEntity
       try {
           EntityA a = callMyBusiness.method(input);
           return a;
       } catch (MyBusinessException e) {
           EntityB b = createMyFailureObj(input)
           return b;
       }
   }
}

// my itemwriter
public class MyItemWriter extends JpaItemWriter<MyBaseOutputEntity> {
    // donthing as JpaItemWriter methods will take care
}

Он делает функционально то, что я хочу. Одним из недостатков выше является то, что когда я вижу историю выполнения задания / выполнения шага, я не могу знать, сколько успешно или сколько неудач, как показывает, например, если 100 читает, то 100 пишет.

Может ли кто-нибудь предложить лучший подход. Полезны ли здесь условные шаги?

1 ответ

Вы можете сгенерировать исключение на вашем процессоре и объявить это исключение как пропускаемое (если нет, chunck будет разбит).

Если вы реализуете ItemProcessListener, вы можете перехватить недопустимый элемент в функции onProcessError(Entry item, Exception t) и записать его в таблицу B. (Внимательно прочитайте документацию: некоторые функции слушателей работают с транзакциями, другие нет)

В конце пакета writedItemsCount - это число допустимых элементов, skippedItemCount - количество недопустимых элементов.

Другой способ записи в разные таблицы - использовать ClassifierCompositeItemWriter с BackToBackPatternClassifier, но вы потеряете количество недопустимых элементов.

Другие вопросы по тегам