我有一个Spring Boot(面向批处理)应用程序,它使用数据源来完成批处理作业并将数据写入数据库。
我在application.yml
内定义了数据源,如:
spring:
datasource:
url: jdbc:h2:mem:JavaSpringBootBatch
username: sa
password:
profiles: # default, development, production
active: default, development
---
spring:
h2:
# ...config/settings here
profiles: development
---
spring:
datasource:
# ...datasource config here
profiles: production
问题是当我尝试将数据源注入其中一个Spring配置文件时:
@Configuration
public class PlayerBatchConfig {
...
@Bean
public ItemWriter<Player> writer(final DataSource dataSource) {
final JdbcBatchItemWriter<Player> jdbcItemWriter = new JdbcBatchItemWriter<>();
...
jdbcItemWriter.setDataSource(dataSource);
jdbcItemWriter.setSql(sql.toString());
return jdbcItemWriter;
}
}
......它告诉我:
无法自动装配。有多个'DataSource'类型的bean。
豆类: 数据源(DataSourceConfiguration.class) 数据源(EmbeddedDataSourceConfiguration.class)
我还尝试注入数据源,如:
@Configuration
public class PlayerBatchConfig {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
...
}
...但没有运气:(尽管两个数据源的问题最终消失了。
任何线索如何“规避”那个?
答案 0 :(得分:0)
由于您有2个数据源,因此需要使用@Qualifier对数据源bean进行注释,以及何时使用它们。 Spring告诉你它不知道你想使用哪一个。
答案 1 :(得分:0)
要DataSource
使用annotate
的{{1}},请参阅spring-boot文档here以获取更多信息。与@Primary
一起,您可能还需要使用@Primary
来控制bean注入。