Пружина откатывает вкладыши
Настроил ниже в моем проекте:
<batch:no-rollback-exception-classes>
<batch:include class="java.sql.SQLException"/>
<batch:include class="org.springframework.dao.DuplicateKeyException"/>
<batch:include class="java.sql.SQLIntegrityConstraintViolationException"/>
</batch:no-rollback-exception-classes>
При загрузке файла, у меня есть дубликаты записей, но так как я настроил org.springframework.dao.DuplicateKeyException
под no-rollback-exception-classes
, Spring batch не должен откатывать записи, но записи все же откатываются. Если я удалю DuplicateKeyException
из списка, то это исключение. Мы используем пакетную версию Spring: 3.0.7.RELEASE
<batch:no-rollback-exception-classes>
<batch:include class="java.sql.SQLException"/>
<batch:include class="org.springframework.dao.DuplicateKeyException"/>
<batch:include class="java.sql.SQLIntegrityConstraintViolationException"/>
</batch:no-rollback-exception-classes>
Записи не подлежат откату, но записи откатываются.
1 ответ
Согласно вашей конфигурации, когда DuplicateKeyException
Spring Batch по-прежнему будет пытаться зафиксировать транзакцию (без отката), но эта фиксация все равно будет неудачной из-за этого исключения. Spring Batch не может заставить базу данных фиксировать записи с дублирующимися ключами или нарушая ограничения целостности.
Вам необходимо отфильтровать повторяющиеся элементы с ItemProcessor
перед отправкой их писателю.