Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用CompositeItemWriter:ItemWriter不是ItemStream_Java_Spring Batch_Compositeitemwriter - Fatal编程技术网

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(数据源); } @凌驾 公共空白写入(列表)