【发布时间】:2020-04-04 00:31:43
【问题描述】:
我在下面配置了我的 Spring Batch 应用程序:
<batch:job id="mPortRiskJob">
<batch:step id="mPortRiskStep">
<tasklet throttle-limit="10">
<chunk reader="MPortRiskReader" processor="MPortRiskProcessor" writer="MPortRiskWriter" commit-interval="10"
skip-limit="1">
<batch:skippable-exception-classes>
<include class="com.common.exception.ERDException"/>
</batch:skippable-exception-classes>
</chunk>
<batch:no-rollback-exception-classes>
<include class="com.common.exception.ERDException"/>
</batch:no-rollback-exception-classes>
</tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="MJobExecutionListener"/>
</batch:listeners>
</batch:job>
在我的作者中,我有一个将记录插入数据库的 for 循环。代码如下:
for (String id : keylist) {
try {
insertRecord(id);
} catch (Exception e) {
throw new ERDException("Failure in write method", e);
}
}
我想要的是,例如,如果第一条记录抛出DuplicateKeyException,则该记录将被跳过,并插入下一条记录。发生的事情是,当ERDException 被抛出时,Spring Batch 会重试所有记录,包括重复记录。我希望它丢弃该特定记录并插入其他记录。有没有办法做到这一点?
【问题讨论】:
标签: spring-batch