public ItemWriter<T> writerOne(){
ItemWriter<T> writer = new ItemWriter<T>();
//your logic here
return writer;
}
public ItemWriter<T> writerTwo(){
ItemWriter<T> writer = new ItemWriter<T>();
//your logic here
return writer;
}
public CompositeItemWriter<T> compositeItemWriter(){
CompositeItemWriter writer = new CompositeItemWriter();
writer.setDelegates(Arrays.asList(writerOne(),writerTwo()));
return writer;
}
@Bean
public Step step1() {
return this.stepBuilderFactory.get("step1")
.<String, String>chunk(2)
.reader(itemReader())
.writer(compositeItemWriter())
.stream(fileItemWriter1())
.stream(fileItemWriter2())
.build();
}
/**
* In Spring Batch 4, the CompositeItemWriter implements ItemStream so this isn't
* necessary, but used for an example.
*/
@Bean
public CompositeItemWriter compositeItemWriter() {
List<ItemWriter> writers = new ArrayList<>(2);
writers.add(fileItemWriter1());
writers.add(fileItemWriter2());
CompositeItemWriter itemWriter = new CompositeItemWriter();
itemWriter.setDelegates(writers);
return itemWriter;
}
5 回答
您可以使用Spring的CompositeItemWriter并将其委托给所有作者 .
这是configuration example .
你是对的 . SB非常基于委托,因此使用CompositeItemWriter是您需要的正确选择 .
您不必像示例那样使用xml . 如果其余代码使用注释,则只需执行以下操作即可 .
根据您的需要,另一个选项是扩展Writer类并在那里添加功能 . 例如,我有一个项目,我正在扩展HibernateItemWriter,然后覆盖write(List items) . 然后我将我正在编写的对象和sessionFactory一起发送到Writer的doWrite方法:doWrite(sessionFactory,filteredRecords) .
所以在上面的例子中,我可以写入扩展类中的csv文件,然后HibernateItemWriter将写入数据库 . 显然,这可能不是这个例子的理想选择,但对于某些情况,这是一个不错的选择 .
Java Config方式SpringBatch4