我正在尝试创建多个数据源。这就是我在配置类中所拥有的:如果我评论@Primary注释,它会抛出一个异常并且应用程序没有启动,为什么@Qualifier不能正常工作?为什么坚持要将其中一个数据源作为主要数据源?
x
我在控制台中看到以下内容:
考虑将其中一个bean标记为@Primary,更新消费者 接受多个bean,或使用@Qualifier来识别bean 应该消费
答案 0 :(得分:1)
这是因为自动配置。 Spring(特别是spring-boot)旨在使配置在非常常见的情况下变得容易。在大多数情况下,您只需要一个数据源,或者您的一个数据源是主数据库(主数据库)。数据源的自动配置依赖于此假设。
如果您有特殊配置(或不常见)要求,则需要手动进行这些配置,并且不能使用“spring-boot”。但这种方式很复杂。您可以在春季文档中进一步了解。
答案 1 :(得分:0)
尝试禁用弹簧自动初始化。
spring.datasource.initialize=false
另外,我不知道你是如何使用你的jdbctemplate bean的。正如您已声明其中两个,要么添加@Primary,要么为它们添加@Qualifier。
答案 2 :(得分:0)
你可以在每个数据源上添加Qualifier
注释和相应的名称,我想这应该可以修复它。
@Bean
@ConfigurationProperties(prefix="spring.datasource")
@Qualifier("fDataSource")
public DataSource fDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.secondDatasource")
@Qualifier("sDataSource")
public DataSource sDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public JdbcTemplate jdbcTemplateOne(@Qualifier("fDataSource") DataSource ds) {
return new JdbcTemplate(ds);
}
@Bean
public JdbcTemplate jdbcTemplateTwo(@Qualifier("sDataSource") DataSource ds ) {
return new JdbcTemplate(ds);
}