デリゲートパターンとステップへの登録

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" />