Spring批处理回滚插件

时间:2019-02-11 10:24:58

标签: spring spring-batch spring-batch-tasklet

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

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

记录不会回滚,但是记录会回滚。

1 个答案:

答案 0 :(得分:0)

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

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