Spring Boot @Qualifier无法正常工作

问题描述 投票:0回答:3

我正在尝试创建多个数据源。这就是我在配置类中所拥有的:如果我评论@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 datasource
3个回答
1
投票

这是因为自动配置。 Spring(特别是spring-boot)旨在使配置在非常常见的情况下变得容易。在大多数情况下,您只需要一个数据源,或者您的一个数据源是主数据库(主数据库)。数据源的自动配置依赖于此假设。

如果您有特殊配置(或不常见)要求,则需要手动进行这些配置,并且可能不使用“spring-boot”。但这种方式很复杂。您可以进一步了解Spring文档。


0
投票

尝试禁用弹簧自动初始化。

spring.datasource.initialize=false

另外,我不知道你是如何使用你的jdbctemplate bean的。正如您已声明其中两个,要么添加@Primary,要么为它们添加@Qualifier。


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.