向 Step 註冊 ItemStream
該步驟必須在其生命週期中的必要點處理 ItemStream 回撥。(有關 ItemStream 介面的更多資訊,請參閱 ItemStream)。如果一個步驟失敗並且可能需要重新啟動,這一點至關重要,因為 ItemStream 介面是該步驟獲取執行之間持久化狀態所需資訊的地方。
如果 ItemReader、ItemProcessor 或 ItemWriter 本身實現了 ItemStream 介面,則這些會自動註冊。任何其他流都需要單獨註冊。這通常發生在間接依賴(例如委託)被注入到讀取器和寫入器中的情況。您可以透過 stream 元素在 step 上註冊一個流。
-
Java
-
XML
以下示例展示瞭如何在 Java 中在 step 上註冊 stream
Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(2).transactionManager(transactionManager)
.reader(itemReader())
.writer(compositeItemWriter())
.stream(fileItemWriter1())
.stream(fileItemWriter2())
.build();
}
以下示例展示瞭如何在 XML 中在 step 上註冊 stream
XML 配置
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="compositeWriter" commit-interval="2">
<streams>
<stream ref="fileItemWriter1"/>
<stream ref="fileItemWriter2"/>
</streams>
</chunk>
</tasklet>
</step>
在前面的示例中,CompositeItemWriter 不是 ItemStream,但它的兩個委託都是。因此,兩個委託寫入器都必須明確註冊為流,以便框架正確處理它們。ItemReader 不需要明確註冊為流,因為它是 Step 的直接屬性。現在該步驟可以重新啟動,並且在發生故障時,讀取器和寫入器的狀態將正確持久化。