配置跳过逻辑
在许多处理场景中,遇到的错误不应导致Step失败,而应跳过。这通常需要由理解数据本身及其含义的人员来决定。例如,金融数据可能不可跳过,因为它涉及资金转移,需要完全准确。另一方面,加载供应商列表可能允许跳过。如果某个供应商因格式错误或缺少必要信息而未能加载,可能不会造成问题。通常,这些错误记录也会被记录下来,这将在后续讨论监听器时涉及。
- Java
- XML
以下 Java 示例展示了使用跳过限制的示例:
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
int skipLimit = 10;
var skippableExceptions = Set.of(FlatFileParseException.class);
SkipPolicy skipPolicy = new LimitCheckingExceptionHierarchySkipPolicy(skippableExceptions, skipLimit);
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(10).transactionManager(transactionManager)
.reader(flatFileItemReader())
.writer(itemWriter())
.faultTolerant()
.skipPolicy(skipPolicy)
.build();
}
注意:skipLimit 可以通过 skipLimit() 方法显式设置。
以下 XML 示例展示了使用跳过限制的示例:
<step id="step1">
<tasklet>
<chunk reader="flatFileItemReader" writer="itemWriter"
commit-interval="10" skip-limit="10">
<skippable-exception-classes>
<include class="org.springframework.batch.infrastructure.item.file.FlatFileParseException"/>
</skippable-exception-classes>
</chunk>
</tasklet>
</step>
在前面的示例中,使用了 FlatFileItemReader。如果在任何时刻抛出了 FlatFileParseException,该项将被跳过,并计入总跳过限制 10 次。在块处理(读取、处理或写入)的任何阶段,都可能抛出已声明的异常(及其子类)。在步骤执行中,读取、处理和写入的跳过次数是分别统计的,但限制适用于所有跳过。一旦达到跳过限制,下一个发现的异常将导致步骤失败。换句话说,第十一次跳过会触发异常,而不是第十次。
备注
跳过限制适用于所有跳过操作(读取、处理和写入)。