此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Batch 文档 5.2.2spring-doc.cadn.net.cn

配置跳过逻辑

在许多情况下,处理过程中遇到的错误不应导致Step失败,但应该跳过。这通常是一个必须的决定由了解数据本身及其含义的人做出。财务数据,例如,可能不可跳过,因为它会导致资金被转移,这需要完全准确。另一方面,加载提供商列表可能会允许跳过。如果提供商因为格式不正确而未加载缺少必要的信息,可能没有问题。通常,这些坏的记录也会被记录下来,稍后在讨论听众时会介绍。spring-doc.cadn.net.cn

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

Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(10, transactionManager)
				.reader(flatFileItemReader())
				.writer(itemWriter())
				.faultTolerant()
				.skipLimit(10)
				.skip(FlatFileParseException.class)
				.build();
}

注意:该skipLimit可以使用skipLimit()方法。 如果未指定,则默认跳过限制设置为 10。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.item.file.FlatFileParseException"/>
         </skippable-exception-classes>
      </chunk>
   </tasklet>
</step>

在前面的示例中,FlatFileItemReader被使用。如果在任何时候,FlatFileParseException被抛出时,该项目将被跳过并计入总数跳过限制为 10。声明的异常(及其子类)可能会被抛出在块处理(读取、处理或写入)的任何阶段。单独计数由内部读取、处理和写入的跳过组成步骤执行,但该限制适用于所有跳过。一旦跳过限制达到,找到的下一个异常会导致该步骤失败。换句话说,第十一个skip 触发异常,而不是第十个。spring-doc.cadn.net.cn

前面示例的一个问题是,除了FlatFileParseException导致Job失败。在某些情况下,这可能是正确的行为。但是,在其他情况下,可能更容易识别哪些异常应该导致失败并跳过其他所有内容。spring-doc.cadn.net.cn

以下 Java 示例显示了排除特定异常的示例:spring-doc.cadn.net.cn

Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(10, transactionManager)
				.reader(flatFileItemReader())
				.writer(itemWriter())
				.faultTolerant()
				.skipLimit(10)
				.skip(Exception.class)
				.noSkip(FileNotFoundException.class)
				.build();
}

注意:该skipLimit可以使用skipLimit()方法。 如果未指定,则默认跳过限制设置为 10。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="java.lang.Exception"/>
                <exclude class="java.io.FileNotFoundException"/>
            </skippable-exception-classes>
        </chunk>
    </tasklet>
</step>

通过识别java.lang.Exception作为可跳过的异常类,配置表示所有Exceptions是可跳过的。但是,通过“排除”java.io.FileNotFoundException,则配置将可跳过的列表细化为异常类的列表,使其全部Exceptions 除了 FileNotFoundException. 任何排除的异常类如果遇到都是致命的(即,它们不会被跳过)。spring-doc.cadn.net.cn

对于遇到的任何异常,可跳过性由最接近的超类确定。任何未分类的异常都被视为“致命”。spring-doc.cadn.net.cn

的顺序skipnoSkip方法调用无关紧要。spring-doc.cadn.net.cn

的顺序<include/><exclude/>元素无关紧要。spring-doc.cadn.net.cn