下面是将在作业中初始化的步骤代码。
@Bean
public Step stepOne() {
return stepBuilderFactory.get("stepOne")
.<EmployeeDTO, EmployeeDTO> chunk(1)
.reader(readerOne())
.processor(processorOne())
.writer(compositeWriter())
.build();
}下面是用于写入数据的复合作者。
@Bean
public CompositeItemWriter<EmployeeDTO> compositeWriter(){
return new CompositeWriter();
}
public class CompositeWriter extends CompositeItemWriter<EmployeeDTO> {
@Autowired
private DataSource dataSource;
List<EmployeeDTO> insert;
List<EmployeeDTO> update;
@Override
public void write(List<? extends EmployeeDTO> arg0) throws Exception {
CompositeItemWriter<EmployeeDTO> compositeItemWriter = new CompositeItemWriter<>();
compositeItemWriter.setDelegates(Arrays.asList(insertW(),updateW()));
}
private JdbcBatchItemWriter<EmployeeDTO> insertW() throws Exception{
JdbcBatchItemWriter<EmployeeDTO> batchItemWriter = new JdbcBatchItemWriter<>();
batchItemWriter.setDataSource(dataSource);
batchItemWriter.setSql("");
batchItemWriter.write(insert);
return batchItemWriter;
}
private JdbcBatchItemWriter<EmployeeDTO> updateW() throws Exception{
JdbcBatchItemWriter<EmployeeDTO> batchItemWriter = new JdbcBatchItemWriter<>();
batchItemWriter.setDataSource(dataSource);
batchItemWriter.setSql("");
batchItemWriter.write(update);
return batchItemWriter;
}
}发布于 2018-11-26 08:08:07
您的配置有几个问题:
write方法(batchItemWriter.write(insert)和batchItemWriter.write(update)),Spring将执行此操作。CompositeItemWriter进行子类化。您可以在其中创建一个注册委托编写器的实例。下面是如何处理您的情况:
1.定义委托编写者
@Bean
public JdbcBatchItemWriter<EmployeeDTO> insertW() throws Exception{
JdbcBatchItemWriter<EmployeeDTO> batchItemWriter = new JdbcBatchItemWriter<>();
batchItemWriter.setDataSource(dataSource);
batchItemWriter.setSql("");
return batchItemWriter;
}
@Bean
public JdbcBatchItemWriter<EmployeeDTO> updateW() throws Exception{
JdbcBatchItemWriter<EmployeeDTO> batchItemWriter = new JdbcBatchItemWriter<>();
batchItemWriter.setDataSource(dataSource);
batchItemWriter.setSql("");
return batchItemWriter;
}2.在CompositeItemWriter中注册委托
@Bean
public CompositeItemWriter<EmployeeDTO> compositeItemWriter() {
CompositeItemWriter<EmployeeDTO> compositeItemWriter = new CompositeItemWriter<>();
compositeItemWriter.setDelegates(Arrays.asList(insertW(), updateW()));
return compositeItemWriter;
}3.在步骤中将委托注册为流(如果它们实现了ItemSteam)
@Bean
public Step stepOne() {
return stepBuilderFactory.get("stepOne")
.<EmployeeDTO, EmployeeDTO> chunk(1)
.reader(readerOne())
.processor(processorOne())
.writer(compositeItemWriter())
.stream(insertW())
.stream(updateW())
.build();
}希望这能有所帮助。
https://stackoverflow.com/questions/53460435
复制相似问题