У меня есть приложение, использующее Spring Batch 3.0.6. Задание Spring Batch использует обработку фрагментов. Интервал фиксации установлен на 100, а предел повторных попыток установлен на 5.
Модуль записи записывает блок данных (из 100 записей) в другое приложение (через TCP), когда достигается интервал фиксации. Если одна из записей плохая (по какой-то причине она вызывает исключение), то Spring Batch пытается записать фрагмент 5 раз (предел повторных попыток) и каждый раз терпит неудачу (как и ожидалось).
Затем Spring Batch пытается выяснить, какая из 100 записей в чанке дает сбой, повторяя их по одной за раз (т. е. интервал фиксации = 1). Кажется, это поведение по умолчанию для повторной попытки.
Есть ли способ быть более эффективным, повторяя, скажем, 10 записей за раз и постепенно сужая размер повторных попыток, пока не будет обнаружена оскорбительная запись. Таким образом, если 95-я запись плохая, то мы найдем ее быстрее, чем проверять их по одной, начиная с записи 1.
Я нашел этот пост от 2011 года:
Spring Batch: Commit-Interval не учитывается после отката во время записи
Есть ли способ заставить SB сначала попробовать меньшие фрагменты, чтобы сузить местонахождение плохой записи. Меньший размер фрагмента (скажем, 10 элементов) может быть необязательным элементом, настраиваемым пользователем, и после этого SB может пробовать по одному элементу за раз, чтобы найти плохую запись.
scan
изFaultTolerantChunkProcessor
, вам, вероятно, потребуется переопределить хороший фрагмент этого класса (по крайней мере, методwrite
), а затем вместо этого создать его экземпляр. - person Artefacto   schedule 18.02.2016