在我的项目中配置了以下内容:
<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批处理不应回滚记录,但仍会回滚记录。如果我从列表中删除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>
记录不会回滚,但是记录会回滚。
答案 0 :(得分:0)
根据您的配置,当抛出DuplicateKeyException
时,Spring Batch仍将尝试提交事务(不回滚),但是由于该异常,此提交仍将失败。 Spring Batch不能强制数据库提交具有重复键或违反完整性约束的记录。
在将重复的项目发送给编写者之前,您需要使用ItemProcessor
过滤掉重复的项目。