首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧批通配符ItemWriter

弹簧批通配符ItemWriter
EN

Stack Overflow用户
提问于 2021-04-20 20:20:12
回答 1查看 295关注 0票数 2

我有一个愚蠢的问题。为了解释我的用例,我有不同类型的DAOs;比如说用户,啤酒.等等,我想对所有的人使用一个通用的ItemWriter。我创建了一个CommonComponentConfiguration,在这里我定义了;

代码语言:javascript
复制
@Bean
@Qualifier(WRITER_INSERT_TO_DATABASE_BEAN)
public ItemWriter<?> insertDbItemWriter(@Qualifier(DATA_SOURCE) DataSource dataSource,
                                        @Qualifier("insertSql") String insertSql) {
         return new MyItemWriter<>(dataSource, insertSql);
     }

作家课是这样的;

代码语言:javascript
复制
@Slf4j
public class MyItemWriter<T> extends JdbcBatchItemWriter<T> {

    public MyItemWriter(DataSource dataSource, String sql) {
        this.setDataSource(dataSource);
        this.setSql(sql);
        this.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
        this.setAssertUpdates(false);
    }

    @Override
    public void write(List<? extends T> items) {
        try {
            super.write(items);
        } catch (Exception e) {
            log.error("Could not write the items " + items);
            log.error(e.getMessage());
        }
    }
}

到目前为止一切都还好。当事情变得复杂时,我为每个存储库提供了单独的配置类,其中我定义了存储库特定的项。例如,为用户插入到DB的步骤。

代码语言:javascript
复制
@Bean
@Qualifier(STEP_INSERT_TO_DB_BEAN)
public Step insertToDbStep(@Qualifier(READER_LOADED_INPUT_DATA_BEAN) ListItemReader<User> sourceItemReader, UserInsertProcessor userInsertProcessor, @Qualifier(WRITER_INSERT_TO_DATABASE_BEAN)
        ItemWriter<User> dbItemWriter) {
    return stepBuilderFactory.get("processInsertStep").<User, User>chunk(100)
            .reader(sourceItemReader)
            .processor(userInsertProcessor)
            .writer(dbItemWriter)
            .build();
}

当我用IJ编写这段代码时,它是在抱怨Could not autowire. Qualified bean must be of 'ItemWriter<User>' type.,但天哪,当我执行该代码时,它会工作,并做它应该做的事情。当我调试时,它会绑定正确的东西。

好吧,你可能会说,如果成功了,就别碰它。不过,我真的想知道窗帘后面发生了什么事。

此外,如果您在设计中发现了一个缺陷(比如尝试对所有的东西都使用一种常见的东西),那么您的建议是非常受欢迎的。

提前谢谢你。

PS:在下面看到这个线程,看起来非常相似的-if不是相同的情况。不过,我想知道这里的泛型是否有什么关系。IntelliJ IDEA在使用Spring的@Autowired注释时显示错误

编辑:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 06:56:02

不过,我真的想知道窗帘后面发生了什么事。

对于这个IntelliJ想法警告,您是对的,这是在IntelliJ IDEA在使用Spring的@Autowired注释时显示错误中讨论的同一个问题(也是Eugene在评论中解释的)。

此外,如果您在设计中发现了一个缺陷(比如尝试对所有的东西都使用一种常见的东西),那么您的建议是非常受欢迎的。

如果当前的方法对您有效,您可以使用它。然而,我建议让一件事做好一件事。在您的示例中,这将为每个域类型使用项目编写器,并将这些写入器包装在ClassifierCompositeItemWriter中。复合写入器使用Classifier对项进行分类,并相应地调用相应的写入器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67185822

复制
相关文章

相似问题

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