我有以下代码
@Bean
public JdbcBatchItemWriter<QuotationDto> writer1() {
return new JdbcBatchItemWriterBuilder<QuotationDto>()
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
.sql("INSERT INTO ...")
.dataSource(dataSource)
.build();
}
@Bean
public JdbcBatchItemWriter<QuotationDto> writer2() {
return new JdbcBatchItemWriterBuilder<QuotationDto>()
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
.sql("INSERT INTO ...")
.dataSource(dataSource)
.build();
}
@Bean
public CompositeItemWriter<QuotationDto> compositeItemWriter() {
CompositeItemWriter writer = new CompositeItemWriter();
writer.setDelegates(Arrays.asList(writer1(), writer2()));
return writer;
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<QuotationDto, QuotationDto>chunk(5)
.reader(reader())
.processor(processor())
.writer(compositeItemWriter())
.stream(writer1())
.stream(writer2())
.build();
}我在将writer1设置为流时遇到IntelliJ错误,因为id没有实现ItemStream。
我做错了什么?有谁有解决方案吗?我没有找到太多关于基于java的组合编写器配置的信息。
发布于 2019-09-17 21:09:25
JdbcBatchItemWriter不实现ItemStream,因此它不能用作面向块的步骤中的流。
如果想要组成两个JDBC项编写器,可以创建一个委托给JdbcTemplate的自定义项编写器。下面是一个快速示例:
class MyItemWriter implements ItemWriter<QuotationDto> {
private JdbcTemplate jdbcTemplate;
public MyItemWriter(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void write(List<? extends QuotationDto> items) throws Exception {
for (QuotationDto dto : items) {
// use jdbcTemplate to batch insert items.
// can do multiple inserts here, they will be part of
// the same transaction driven by Spring Batch
}
}
}https://stackoverflow.com/questions/57972839
复制相似问题