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