此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2spring-doc.cn

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2spring-doc.cn

在许多情况下,处理时遇到的错误不应导致失败,而应跳过。这通常是一个必须 由了解数据本身及其含义的人制作。财务数据, 例如,可能无法跳过,因为它会导致资金被转移,这 需要完全准确。另一方面,加载供应商列表可能会 允许跳过。如果供应商由于格式不正确或被 缺少必要的信息,可能没有问题。通常,这些 还会记录记录,稍后在讨论侦听器时将对此进行介绍。Stepspring-doc.cn

下面的 Java 示例显示了使用跳过限制的示例:spring-doc.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();
}

下面的 XML 示例显示了使用跳过限制的示例:spring-doc.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>

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

前面的示例的一个问题是,除了 a 之外的任何其他异常都会导致 失败。在某些情况下,这可能是 正确的行为。但是,在其他情况下,可能更容易确定 异常应该会导致失败并跳过其他所有内容。FlatFileParseExceptionJobspring-doc.cn

下面的 Java 示例显示了一个排除特定异常的示例:spring-doc.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();
}

下面的 XML 示例显示了一个排除特定异常的示例:spring-doc.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>

通过将 ID 标识为可跳过的异常类,配置 表示所有 API 都是可跳过的。但是,通过 “excluding” ,该配置会细化 skippable 的列表 exception 类设置为 .任何被排除的 如果遇到 Exception 类,则 Exception 类是致命的(即,不会跳过它们)。java.lang.ExceptionExceptionsjava.io.FileNotFoundExceptionExceptionsFileNotFoundExceptionspring-doc.cn

对于遇到的任何异常,可跳过性由最近的超类决定 在 Class 层次结构中。任何未分类的异常都被视为 “致命” 异常。spring-doc.cn

和 方法调用的顺序无关紧要。skipnoSkipspring-doc.cn

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