The Delegate Pattern and Registering with the Step
请注意,CompositeItemWriter 是委派模式的一个例子,它在 Spring Batch 中很常见。委托本身可能会实现回调接口,例如 StepListener。如果它们这样做并且与 Spring Batch Core 一起用作 Job 中的 Step 的一部分,那么几乎可以肯定需要手动将它们注册到 Step 中。如果读取器、写入器或处理器直接连接到 Step,并且它实现了 ItemStream 或 StepListener 接口,那么它会自动注册。然而,由于 Step 不知道委托,因此需要将它们注入为侦听器或流(或两者,如果适用)。
- Java
-
以下示例展示了如何在 Java 中将委托注入为流:
Java Configuration
@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
-
以下示例展示了如何在 XML 中将委托注入为流:
XML Configuration
<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" />