#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. Как-то не заметил этого комментария. Я обновил вопрос с некоторой дополнительной информацией. Да, повторный список, кажется, имеет некоторый смысл. Какие-либо дополнительные сведения об использовании его для решения вышеуказанной проблемы ?