使用 Step 注册 ItemStream

该步骤必须在其生命周期的必要节点处理 ItemStream 个回调。(有关 ItemStream 接口的更多信息,请参阅 ItemStream)。这一点至关重要,因为如果步骤失败并可能需要重新启动,ItemStream 接口正是步骤获取执行之间持久状态所需信息的地方。spring-doc.cadn.net.cn

如果 ItemReaderItemProcessorItemWriter 本身实现了 ItemStream 接口,则它们会自动注册。任何其他流都需要单独注册。这种情况常见于将间接依赖(例如委托)注入到读取器和写入器时。您可以通过 stream 元素在 step 上注册流。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 中的 step 上注册一个 streamspring-doc.cadn.net.cn

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 上注册一个 streamspring-doc.cadn.net.cn

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 的直接属性。现在该步骤支持重启,并且在发生故障时,读取器和写入器的状态会被正确持久化。spring-doc.cadn.net.cn