Позвольте мне пройтись по двум частям.Сначала я объясню, почему это работает так, как работает, затем я предложу вариант решения вашей проблемы.
Почему повторная попытка элемента по элементу
ВВ вашей конфигурации вы указали, что она отказоустойчива.При этом, когда в ItemWriter
возникает исключение, мы не знаем, какой элемент вызвал его, поэтому у нас нет способа пропустить / повторить его.Вот почему, когда мы начинаем логику пропуска / повторных попыток, мы переходим к элементу за элементом.
Как обрабатывать повторы с помощью фрагмента
То, к чему это приводит,вам нужно получить размер фрагмента 1, чтобы это работало.Это означает, что вместо того, чтобы полагаться на Spring Batch для перебора элементов в чанке для ItemProcessor
, вам придется сделать это самостоятельно.Таким образом, ваш ItemReader
вернет List<DataRecord>
, а ваш ItemProcessor
зациклит этот список.Ваш ItemWriter
займет List<List<DataRecord>>
.Я бы порекомендовал создать декоратор для ItemWriter
, который разворачивает внешний список перед передачей его основному ItemWriter
.
Это лишает возможности делать истинный пропуск одного элемента в этом списке, ноПохоже, что это нормально для вашего случая использования.