|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
向 Step 注册 ItemStream
step 必须在其生命周期中的适当时机处理 ItemStream 的回调。
(关于 ItemStream 接口的更多信息,可参见
ItemStream。)
这一点在 step 失败且可能需要重启时尤为重要,因为 step 正是通过 ItemStream 接口,
获取各次执行之间持久化状态的相关信息。
如果 ItemReader、ItemProcessor 或 ItemWriter 本身实现了 ItemStream 接口,
那么它们会被自动注册。其他 stream 则需要单独注册。这种情况常见于 reader 或 writer 中注入了间接依赖,
例如 delegate。你可以通过 stream 元素把一个 stream 注册到 step 上。
-
Java
-
XML
下面的示例展示了如何在 Java 中为 step 注册 stream:
Java Configuration
@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 Configuration
<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,
但它的两个 delegate 都是。因此,这两个 delegate writer 必须显式注册为 stream,
框架才能正确处理它们。ItemReader 则不需要显式注册为 stream,
因为它是 Step 的直接属性。完成这些配置后,该 step 就具备了重启能力,
并且在发生失败时,reader 和 writer 的状态也能够被正确持久化。