我有一个基于xml的弹簧批量配置,应该迁移到基于注释的配置。
但我找不到任何解决方案来将一个块定义到tasklet定义中。
有我的xml和代码库解除:
<step id="files2Memory">
<tasklet>
<chunk reader="pointFileReader" processor="pointFileProcessor"
writer="pointFileWriter" commit-interval="50000"/>
</tasklet>
</step>
public Step files2Memory() {
return stepBuilders.get("files2Memory")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
return null;
}
})
.chunk(50000)
.reader(new PointFileReader())
.writer(new PointFileWriter())
.processor(new PointFileProcessor())
.build();
}
最好的问候
答案 0 :(得分:2)
使用@Component标记PointFileReader和PointFileWriter PointFileProcessor,如果需要,使用@Scope(&#34; step&#34;)。确保组件扫描覆盖它们。
在你的批量配置文件autowried上面。
@Autowired
private PointFileWriter pointFileWriter ;
@Autowired
private PointFileReader pointFileReader ;
@Autowired
private ItemProcessor<TypeFromReader, TypeForWriter> pointFileProcessor ;
@Autowired
private PlatformTransactionManager transactionManager;
...
@Bean
protected Step files2Memory(){
return steps
.get("files2Memory")
.transactionManager(transactionManager)
.<TypeFromReader, TypeForWriter> chunk(5000)
.reader(pointFileReader )
.processor(pointFileProcessor)
.writer(pointFileWriter).build();
}
如果PointFileReader和PointFileWriter PointFileProcessor中的一个不能指定为PointFileReader和PointFileWriter PointFileProcessorPointFileReader和PointFileWriter @Component,则可以将它们定义为@Beans并用方法调用替换字段
e.g。
@Bean
protected ItemReader<TypeFromReader> pointFileReader() {
PointFileReader <TypeFromReader> reader = new PointFileReader <TypeFromReader>();
reader.set(...)
return reader;
}
答案 1 :(得分:1)
只需删除.tasklet部分,如果您想成为类型安全的,请使用.<TypeFromReader, TypeForWriter>chunk
.tasklet用于自定义Tasklets,.chunk已经为您提供了(隐藏的)基于块的实现