0

在我的项目中配置了以下内容:

<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>

预计不会回滚记录,但会回滚记录。

4

1 回答 1

0

根据您的配置,当 aDuplicateKeyException被抛出时,Spring Batch 仍会尝试提交事务(不回滚),但由于该异常,此提交无论如何都会失败。Spring Batch 不能强制数据库提交具有重复键或违反完整性约束的记录。

ItemProcessor在将它们发送给作者之前,您需要使用 a 过滤掉重复的项目。

于 2019-02-11T11:51:08.080 回答