У меня есть пакет, реализованный с помощью JSR-352 (с использованием jberet для wildfly).
У меня есть чанк с номером элемента 15, а java.lang.Exception
настроен как исключение, которое можно повторить и пропустить.
Когда есть много исключений, большинство элементов будет обработано несколько раз.В этом крайнем случае все элементы будут вызывать исключение в авторе:
- Первые 15 элементов считываются
- Исключение возникает для первого элемента
- Чанк откатывается исконфигурировано с числом элементов = 1
- Первый элемент считан
- Возникает исключение, элемент пропускается
- Продолжите работу с другими 14 элементами, исключение может возникнуть для каждого элемента,каждый элемент пропускается
- После первых 15 элементов возвращается чанк с числом элементов = 15
- Элементы 16-30 считываются
- Возникает исключение
- Считыватель откатывается до последней контрольной точки
На данный момент контрольной точки по-прежнему нет, поскольку еще не было успешно обработанного элемента.Следовательно, читатель снова начинает с первого пункта.Все 30 элементов обрабатываются с числом элементов = 1. и т. Д.
Если таких отказов много, партия будет обрабатывать все элементы снова и снова.
Я думаю, что контрольную точку необходимо установитьтакже для пропущенных элементов, поскольку пропущенный элемент не должен обрабатываться снова.
Я думаю, что это ошибка в спецификации, поэтому я уже открыл там проблему: https://github.com/WASdev/standards.jsr352.batch-spec/issues/15 Или я ошибаюсь и неправильно понялреализация?
Как это реализовано в Spring Batch?