首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用CompositeItemWriter: ItemWriter不是ItemStream

无法使用CompositeItemWriter: ItemWriter不是ItemStream
EN

Stack Overflow用户
提问于 2019-09-17 18:59:23
回答 1查看 233关注 0票数 0

我有以下代码

代码语言:javascript
复制
@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的组合编写器配置的信息。

EN

回答 1

Stack Overflow用户

发布于 2019-09-17 21:09:25

JdbcBatchItemWriter不实现ItemStream,因此它不能用作面向块的步骤中的流。

如果想要组成两个JDBC项编写器,可以创建一个委托给JdbcTemplate的自定义项编写器。下面是一个快速示例:

代码语言:javascript
复制
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
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57972839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档