Step 註冊 ItemStream

該步驟必須在其生命週期中的必要點處理 ItemStream 回撥。(有關 ItemStream 介面的更多資訊,請參閱 ItemStream)。如果一個步驟失敗並且可能需要重新啟動,這一點至關重要,因為 ItemStream 介面是該步驟獲取執行之間持久化狀態所需資訊的地方。

如果 ItemReaderItemProcessorItemWriter 本身實現了 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 的直接屬性。現在該步驟可以重新啟動,並且在發生故障時,讀取器和寫入器的狀態將正確持久化。

© . This site is unofficial and not affiliated with VMware.