委託模式和 Step 註冊
注意,`CompositeItemWriter` 是委託模式的一個例子,這在 Spring Batch 中很常見。委託者本身可能實現回撥介面,例如 `StepListener`。如果它們實現了這些介面,並且作為 `Job` 中 `Step` 的一部分與 Spring Batch Core 一起使用,那麼它們幾乎肯定需要手動向 `Step` 註冊。直接注入到 `Step` 中的 reader, writer, 或 processor,如果實現了 `ItemStream` 或 `StepListener` 介面,則會自動註冊。然而,由於 `Step` 不知道這些委託者,它們需要被注入為 listeners 或 streams (如果適用,兩者都需要)。
-
Java
-
XML
以下示例展示瞭如何在 Java 中將委託者注入為 stream
Java 配置
@Bean
public Job ioSampleJob(JobRepository jobRepository, Step step1) {
return new JobBuilder("ioSampleJob", jobRepository)
.start(step1)
.build();
}
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(2, transactionManager)
.reader(fooReader())
.processor(fooProcessor())
.writer(compositeItemWriter())
.stream(barWriter())
.build();
}
@Bean
public CustomCompositeItemWriter compositeItemWriter() {
CustomCompositeItemWriter writer = new CustomCompositeItemWriter();
writer.setDelegate(barWriter());
return writer;
}
@Bean
public BarWriter barWriter() {
return new BarWriter();
}
以下示例展示瞭如何在 XML 中將委託者注入為 stream
XML 配置
<job id="ioSampleJob">
<step name="step1">
<tasklet>
<chunk reader="fooReader" processor="fooProcessor" writer="compositeItemWriter"
commit-interval="2">
<streams>
<stream ref="barWriter" />
</streams>
</chunk>
</tasklet>
</step>
</job>
<bean id="compositeItemWriter" class="...CustomCompositeItemWriter">
<property name="delegate" ref="barWriter" />
</bean>
<bean id="barWriter" class="...BarWriter" />