|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
配置跳过逻辑
在很多场景下,处理过程中遇到的错误并不一定要导致 Step 失败,而是可以选择跳过。
这种决定通常必须由真正理解数据本身及其业务含义的人来做出。
例如,财务数据通常不适合跳过,因为它关系到资金流转,必须绝对准确。
但加载供应商列表这类任务则可能允许跳过。如果某个供应商记录由于格式不正确或缺少必要信息而没有被导入,
通常不会造成严重问题。一般来说,这些坏记录还会被记录日志,关于这一点后面在介绍监听器时还会再讲。
-
Java
-
XML
下面的 Java 示例展示了如何使用跳过上限:
Java Configuration
@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 示例展示了如何使用跳过上限:
XML Configuration
<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,该 item 就会被跳过,
并计入总跳过上限 10。所声明的异常(以及它们的子类)可能在块处理的任意阶段抛出,
包括读取、处理和写出。step 执行内部会分别统计读取、处理和写出阶段的跳过次数,
但上限是对所有跳过次数统一生效的。一旦达到跳过上限,下一次出现异常时 step 就会失败。
换句话说,触发异常的是第 11 次跳过,而不是第 10 次。
|
跳过上限适用于所有跳过场景(读取、处理和写出)。 |