配置跳过逻辑

在许多场景中,处理过程中遇到的错误不应导致 Step 失败,而应被跳过。这通常必须由理解数据本身及其含义的人员来决定。例如,财务数据可能不可跳过,因为它涉及资金转账,必须完全准确。另一方面,加载提供商列表时可能允许跳过。如果某个提供商因格式不正确或缺少必要信息而未能加载,通常不会造成问题。通常,这些不良记录也会被记录日志,这一点将在后续讨论监听器时涵盖。spring-doc.cadn.net.cn

以下 Java 示例展示了如何使用跳过限制:spring-doc.cadn.net.cn

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() 方法显式设置。spring-doc.cadn.net.cn

以下 XML 示例展示了如何使用跳过限制:spring-doc.cadn.net.cn

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 次的跳过限制中。声明可能抛出的异常(及其子类)可能在块处理的任何阶段(读取、处理或写入)发生。在步骤执行期间,会分别统计读取、处理和写入阶段的跳过次数,但该限制适用于所有跳过操作的总和。一旦达到跳过限制,下一个发现的异常将导致步骤失败。换句话说,是第十一次跳过触发异常,而不是第十次。spring-doc.cadn.net.cn

跳过限制适用于所有跳过操作(读取、处理和写入)。spring-doc.cadn.net.cn