我有一个愚蠢的问题。为了解释我的用例,我有不同类型的DAOs;比如说用户,啤酒.等等,我想对所有的人使用一个通用的ItemWriter。我创建了一个CommonComponentConfiguration,在这里我定义了;
@Bean
@Qualifier(WRITER_INSERT_TO_DATABASE_BEAN)
public ItemWriter<?> insertDbItemWriter(@Qualifier(DATA_SOURCE) DataSource dataSource,
@Qualifier("insertSql") String insertSql) {
return new MyItemWriter<>(dataSource, insertSql);
}作家课是这样的;
@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的步骤。
@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注释时显示错误
编辑:

发布于 2021-04-21 06:56:02
不过,我真的想知道窗帘后面发生了什么事。
对于这个IntelliJ想法警告,您是对的,这是在IntelliJ IDEA在使用Spring的@Autowired注释时显示错误中讨论的同一个问题(也是Eugene在评论中解释的)。
此外,如果您在设计中发现了一个缺陷(比如尝试对所有的东西都使用一种常见的东西),那么您的建议是非常受欢迎的。
如果当前的方法对您有效,您可以使用它。然而,我建议让一件事做好一件事。在您的示例中,这将为每个域类型使用项目编写器,并将这些写入器包装在ClassifierCompositeItemWriter中。复合写入器使用Classifier对项进行分类,并相应地调用相应的写入器。
https://stackoverflow.com/questions/67185822
复制相似问题