Проблема повторной попытки весенней партии в случае customListener

#java #spring #spring-batch

Вопрос:

У меня есть customWriterListener, который реализует значение по умолчанию ItemWriteListener . В рамках afterWrite и onWriteError методов я обновляю количество успешных и неудачных заданий в своей таблице для задания.

 public class CustomItemWriterListener implements ItemWriteListener<Item> {

  @Override
  public void afterWrite(List<? extends Item> items) {
    long failureCount = items.stream().filter(Item::hasErrors).count();
    long successCount = items.size() - failureCount;
    incrementCountsInDb(failureCount, successCount);
  }

  @Override
  public void onWriteError(Exception exception, List<? extends Item> items) {
    int failureCount = items.size();
    int successCount = 0
    incrementCountsInDb(failureCount, successCount);
  }
}
 

Теперь я настроил свои повторные попытки следующим образом.

 stepBuilderFactory.get("testStep")
            .<String, Object>chunk(10)
            .reader(customReader()) 
            .processor(processor())
            .writer(customWriter())
            .faultTolerant()
            .retry(DataAccessException.class)
            .retryLimit(3)
            .build();        
 

Если мой фрагмент из 1000 записей завершается ошибкой в первый раз из-за исключения DataAccessException, количество ошибок и успехов обновляется как 1000 и 0 в рамках выполнения onWriteError метода. Теперь фрагмент повторяется, если на этот раз фрагмент выполнен успешно, количество успешных попыток равно 1000, а количество неудач также равно 1000, поскольку оно было обновлено как часть первого сбоя. Но в идеале итоговое количество должно быть успешным — 1000 и неудачным — 0, так как фрагмент был успешно обработан после повторных попыток.

Как решить эту проблему ?

Комментарии:

1. Я не уверен, что полностью понимаю проблему. Можете ли вы поделиться своим слушателем и минимальным примером, который показывает проблему? Вы ожидаете, что слушатель будет знать о повторных попытках? Если это так, я думаю, что это также должно быть реализовано RetryListener .

2. Приносим извинения за долгую задержку @MahmoudBenHassine. Как-то не заметил этого комментария. Я обновил вопрос с некоторой дополнительной информацией. Да, повторный список, кажется, имеет некоторый смысл. Какие-либо дополнительные сведения об использовании его для решения вышеуказанной проблемы ?