如何使用代码在tasklet中定义spring批处理块

时间:2014-11-13 11:04:48

标签: spring-batch chunks tasklet

我有一个基于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();
}

最好的问候

2 个答案:

答案 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已经为您提供了(隐藏的)基于块的实现