Java Can';t使用CompositeItemWriter:ItemWriter不是ItemStream
我有以下代码Java Can';t使用CompositeItemWriter:ItemWriter不是ItemStream,java,spring-batch,compositeitemwriter,Java,Spring Batch,Compositeitemwriter,我有以下代码 @Bean public JdbcBatchItemWriter<QuotationDto> writer1() { return new JdbcBatchItemWriterBuilder<QuotationDto>() .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
@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();
}
@Bean
公共JdbcBatchItemWriter编写器1(){
返回新的JdbcBatchItemWriterBuilder()
.itemSqlParameterSourceProvider(新的BeanPropertyItemSqlParameterSourceProvider())
.sql(“插入到…”)
.dataSource(数据源)
.build();
}
@豆子
公共JdbcBatchItemWriter编写器2(){
返回新的JdbcBatchItemWriterBuilder()
.itemSqlParameterSourceProvider(新的BeanPropertyItemSqlParameterSourceProvider())
.sql(“插入到…”)
.dataSource(数据源)
.build();
}
@豆子
公共CompositeItemWriter CompositeItemWriter(){
CompositeItemWriter=新的CompositeItemWriter();
writer.setDelegates(Arrays.asList(writer1(),writer2());
返回作者;
}
@豆子
公共步骤第1步(){
返回stepBuilderFactory.get(“step1”)
.chunk(5)
.reader(reader())
.processor(处理器())
.writer(compositeItemWriter())
.stream(writer1())
.stream(writer2())
.build();
}
我在将writer1设置为流时遇到IntelliJ错误,因为id没有实现ItemStream
我做错了什么?有人有解决办法吗?我没有找到太多关于基于java的复合编写器配置的信息。
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
}
}
}
类MyItemWriter实现ItemWriter{
私有JdbcTemplate JdbcTemplate;
公共MyItemWriter(数据源数据源){
this.jdbcTemplate=新的jdbcTemplate(数据源);
}
@凌驾
公共空白写入(列表)