配置 Skip Logic
在许多情况下,处理时遇到的错误不应导致Step
失败,但应跳过。这通常是一个必须
由了解数据本身及其含义的人制作。财务数据,
例如,可能无法跳过,因为它会导致资金被转移,这
需要完全准确。另一方面,加载供应商列表可能会
允许跳过。如果供应商由于格式不正确或被
缺少必要的信息,可能没有问题。通常,这些
还会记录记录,稍后在讨论侦听器时将对此进行介绍。
-
Java
-
XML
下面的 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。
下面的 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。可能会引发声明的异常(及其子类)
在 chunk processing (读取、处理或 write) 的任何阶段。单独的计数
由 read、process 和 write 中的 skip 组成
步骤执行,但限制适用于所有跳过。一旦跳过限制为
reached,则找到的下一个异常将导致步骤失败。换句话说,第十一个
skip 会触发异常,而不是第十个异常。
前面示例的一个问题是,除了FlatFileParseException
导致Job
失败。在某些情况下,这可能是
正确的行为。但是,在其他情况下,可能更容易确定
异常应该会导致失败并跳过其他所有内容。
-
Java
-
XML
下面的 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。
下面的 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
作为可跳过的 Exception 类,配置
表示所有Exceptions
是可跳过的。然而,通过“排除”java.io.FileNotFoundException
,则配置会细化
exception 类设置为 allExceptions
除了 FileNotFoundException
.任何被排除的
如果遇到 Exception 类,则 Exception 类是致命的(即,不会跳过它们)。
对于遇到的任何异常,可跳过性由最近的超类决定 在 Class 层次结构中。任何未分类的异常都被视为 “致命” 异常。
-
Java
-
XML
的顺序skip
和noSkip
方法调用无关紧要。
的顺序<include/>
和<exclude/>
元素无关紧要。