配置跳過邏輯
在許多場景下,處理過程中遇到的錯誤不應導致 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。宣告的異常(及其子類)可能在分塊處理的任何階段(讀取、處理或寫入)丟擲。在步驟執行中,讀取、處理和寫入的跳過次數是單獨計算的,但限制適用於所有跳過。一旦達到跳過限制,發現的下一個異常將導致步驟失敗。換句話說,第十一次跳過會觸發異常,而不是第十次。
|
跳過限制適用於所有跳過(讀取、處理和寫入)。 |