配置跳过逻辑
在许多场景中,处理过程中遇到的错误不应导致
Step 失败,而应被跳过。这通常必须由理解数据本身及其含义的人员来决定。例如,财务数据可能不可跳过,因为它涉及资金转账,必须完全准确。另一方面,加载提供商列表时可能允许跳过。如果某个提供商因格式不正确或缺少必要信息而未能加载,通常不会造成问题。通常,这些不良记录也会被记录日志,这一点将在后续讨论监听器时涵盖。
-
Java
-
XML
以下 Java 示例展示了如何使用跳过限制:
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 示例展示了如何使用跳过限制:
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 次的跳过限制中。声明可能抛出的异常(及其子类)可能在块处理的任何阶段(读取、处理或写入)发生。在步骤执行期间,会分别统计读取、处理和写入阶段的跳过次数,但该限制适用于所有跳过操作的总和。一旦达到跳过限制,下一个发现的异常将导致步骤失败。换句话说,是第十一次跳过触发异常,而不是第十次。
|
跳过限制适用于所有跳过操作(读取、处理和写入)。 |