У меня есть Spring Batch Job с одним шагом и SkipListener.
Проблема это когда ItemWriter вставляет записи по частям в базу данных Oracle с ошибкой при одной вставке (например, ошибка ограничения целостности). Затем метод OnWriteInSkip в SkipListener вызывается несколько раз с несколькими ошибками вставки, а не только один раз с ошибкой вставки. В таблице в базе данных Oracle все в порядке, пропущена только одна запись, та, что содержит ошибку.
Пример:
Первый вариант использования:
ItemWriter вставляет первичные ключи 1, 2, 3, 4, 5, 6, 7, 7< /strong>, 8, 9 в таблица в базе данных Oracle (первичный ключ 7 вставлен дважды)
=> OnWriteInSkip в SkipListener вызывается для 7, 2, 3, 4, 9, и в базе данных пропускается только первичный ключ 7
Второй вариант использования:
ItemWriter вставляет первичные ключи 1, 2, 3, 4, 5, 6, 7, 8, 9 в таблице в базе данных Oracle
=> OnWriteInSkip в SkipListener не вызывается и ни одна запись не пропускается в базе данных, как предполагалось.
Среда: Spring Boot 3.3.6, Spring Batch 5.1.2, Oracle 21
Job
Код: Выделить всё
return new StepBuilder("customStep", jobRepository)
. chunk(400, transactionManager)
.reader(reader)
.processor(processor)
.writer(writer)
.faultTolerant()
.skip(Exception.class)
.skipLimit(1000)
.listener(skipListener)
.build();
Буду рад пониманию и решение этой проблемы. Я попробовал несколько исправлений, но безуспешно. Кто-нибудь сталкивался с этой проблемой или есть решение для ее решения? Спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... with-oracl
Мобильная версия