跳到主要内容
版本:6.0.2

委托模式与步骤注册

DeepSeek V3 中英对照 The Delegate Pattern and Registering with the Step

请注意,CompositeItemWriter 是委托模式的一个示例,这在 Spring Batch 中很常见。委托者本身可能实现回调接口,例如 StepListener。如果它们确实实现了这些接口,并且与 Spring Batch Core 结合使用,作为 JobStep 的一部分,那么几乎肯定需要手动将它们注册到 Step 中。直接连接到 Step 的读取器、写入器或处理器如果实现了 ItemStreamStepListener 接口,则会自动注册。然而,由于 Step 不知道这些委托者,因此需要将它们作为监听器或流(或两者,如果适用)注入。

以下示例展示了如何在 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(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();
}