デリゲートパターンとステップへの登録
CompositeItemWriter
は、Spring Batch で一般的な委譲パターンの例であることに注意してください。デリゲート自体が、StepListener
などのコールバックインターフェースを実装する場合があります。もしそうなら、それらが Job
の Step
の一部として Spring Batch コアと組み合わせて使用されているなら、それらはほぼ確実に Step
に手動で登録する必要があります。ItemStream
または StepListener
インターフェースを実装している場合、Step
に直接接続されているリーダー、ライター、プロセッサーは自動的に登録されます。ただし、デリゲートは Step
に認識されていないため、リスナーまたはストリーム(または適切な場合は両方)として注入する必要があります。
Java
XML
次の例は、デリゲートを Java のストリームとして挿入する方法を示しています。
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 のストリームとしてデリゲートを挿入する方法を示しています。
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" />