Я уже некоторое время использую Spring Batch, и сегодня я попытался улучшить свои партии, чтобы сделать их более пуленепробиваемыми. Поэтому я включил .faultTolerant и .skipLimit / .skip, но не включил ни одной стратегии повторения.
Почти во всех моих пакетах есть 1 считыватель (JpaPagingItemReader для чтения данных из моей базы данных), 1 процессор и 1 писатель для создания XML файлов. Все эти 3 части находятся в одном шаге, и мой размер чанка обычно составляет около 50.
Я заметил два побочных эффекта, когда возникает исключение с возможностью пропуска, и я хотел бы знать, есть ли способ изменить эти значения по умолчанию поведения =>
- Я обычно читаю сущности JPA в своем ридере, отправляю их на свой процессор, где я изменяю их свойства для обновления своей базы данных. Но когда возникает пропускаемое исключение, и объекты снова обрабатываются, они становятся отсоединенными объектами, и они больше не соответствуют базе данных, потому что их состояние было обновлено в предыдущем процессе, пока база данных была откатана. Я понимаю, что результаты читателя кэшируются, и что в документации говорится, что результат ItemReader должен оставаться «идемпотентным» (не измененным). Но есть ли способ отключить кэш ItemReader и принудительно загрузить объект fre sh при повторной обработке элемента? Это больше подходит для моего варианта использования.
- Я заметил, что когда элемент фильтруется (процессор возвращает ноль), а затем возникает исключение с возможностью пропуска, фильтрованные элементы не обрабатываются снова после отката. Есть ли способ изменить это?
Прежде чем задавать этот вопрос, я много искал по stackoverflow, документации по пакетным ресурсам и в Google, но не смог найти ответ.
Заранее благодарен за вашу драгоценную помощь И большое спасибо разработчикам Spring Batch за этот замечательный инструмент!