我们有一个春季批处理作业,该作业具有面向块的步骤,其中一个ItemReader(这是一个JpaItemPagingReader)和两个ItemWriter(使用复合编写器,第一个删除数据库中的实体,第二个持久化项目在Elasticsearch上)。< / p>
如果复合编写器内部发生错误,则“步骤和作业”将失败。相反,我们想跳过大块,然后继续下一个。
我们尝试配置跳过逻辑:
public Step step1() {
return this.stepBuilderFactory.get("step1")
.<String, String>chunk(10)
.reader(itemReader())
.writer(itemWriter())
.faultTolerant()
.skipLimit(10)
.skip(CustomException.class)
.build();
}
但是在这种情况下,每个项目都需要在复合编写器中逐个重新处理,这很慢。
是否可以跳过失败的块并继续执行下一个块,而不是从当前块中逐个重试?