我在执行 spring 批时遇到了一个奇怪的情况 . 我已将我的作业步骤执行配置为使用“skippable-exception-classes”
<step id="prepareFileStep" next="fillRecordsCounterStep">
<tasklet>
<chunk reader="stagingIdReader" writer="customerIdRecordCompWriter" commit-interval="50" skip-limit="200">
<streams>
<stream ref="flatFileRecordWriter" />
</streams>
<skippable-exception-classes>
<include class="java.lang.Exception" />
</skippable-exception-classes>
</chunk>
<listeners>
<listener ref="prepareFlatFileSkipListener" />
<listener ref="prepareFlatFileStepListener" />
</listeners>
</tasklet>
我的onSkipInWrite()实现为:
@OnSkipInWrite
public void onSkipInWrite(Object item, Throwable exception) {
AppLog.warn(AppConstants.CALLER, "Skipping Customer Id:"+ item.getCustomer().getCustomerId()+"\n" + exception.toString());
}
我想知道为什么日志文件已经两次打印跳过的项目,当我调试它只执行一次?请建议我修复朋友...
1 回答
很可能是由于Spring批处理块已经回滚并且一次作为一个块项重新重试(而不是整个块大小):
Spring Batch: skipping during item write