没有主数据源的Spring多数据源

没有主数据源的Spring多数据源,spring,dependency-injection,datasource,autowired,Spring,Dependency Injection,Datasource,Autowired,我有一个问题,我需要创建两个数据源,但我不能使用@Primary,因为在其他模块中,我也有两个数据源,然后在第三个模块中,我包括两个模块,因此有两个主要模块 我想使用@Qualifier,但它不起作用 @Bean(name = "secondDataSourceProperties") @ConfigurationProperties("second") public DataSourceProperties secondDataSourceProperties() { return n

我有一个问题,我需要创建两个
数据源
,但我不能使用
@Primary
,因为在其他模块中,我也有两个
数据源
,然后在第三个模块中,我包括两个模块,因此有两个主要模块

我想使用
@Qualifier
,但它不起作用

@Bean(name = "secondDataSourceProperties")
@ConfigurationProperties("second")
public DataSourceProperties secondDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean(name = "secondDataSource")
@ConfigurationProperties("second.configuration")
public DataSource secondDataSource(@Qualifier("secondDataSourceProperties") DataSourceProperties dataSourceProperties) {
    HikariDataSource ds = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    ds.setConnectionTestQuery("SELECT 1");
    ds.setConnectionInitSql("SELECT 1");
    ds.setPoolName("jdbc/second");
    return ds;
}

@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager secondDataSourceTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

@Bean
@ConfigurationProperties("first")
public DataSourceProperties firstDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean(name = "firstDataSource")
@ConfigurationProperties("first.configuration")
public DataSource firstDataSource(@Qualifier("firstDataSourceProperties") DataSourceProperties dataSourceProperties) {
    HikariDataSource ds = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    ds.setConnectionTestQuery("SELECT 1");
    ds.setConnectionInitSql("SELECT 1");
    ds.setPoolName("jdbc/first");
    return ds;
}

@Bean(name = "firstTransactionManager")
public DataSourceTransactionManager firstDataSourceTransactionManager(@Qualifier("firstDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}
我得到的错误是:

没有类型为的限定bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceProperties' 可用:需要单个匹配bean,但找到5个: secondDataSourceProperties、firstDataSourceProperties、3DataSourceProperties、4DataSourceProperties、spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties

我使用的
DataSource
与代码中的类似:

@Autowired
@Qualifier("first")
private DataSource dataSource;


做下面的事情怎么样?没有
@限定符
混乱?
@Bean
的方法名默认用作Bean的“限定符”

@Bean
@ConfigurationProperties("first")
public DataSourceProperties firstDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("second")
public DataSourceProperties secondDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
public DataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
    HikariDataSource ds = firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    ds.setConnectionTestQuery("SELECT 1");
    ds.setConnectionInitSql("SELECT 1");
    ds.setPoolName("jdbc/first");
    return ds;
}

@Bean
public DataSource secondDataSource(DataSourceProperties secondDataSourceProperties) {
    HikariDataSource ds = secondDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    ds.setConnectionTestQuery("SELECT 1");
    ds.setConnectionInitSql("SELECT 1");
    ds.setPoolName("jdbc/second");
    return ds;
}

@Bean
public DataSourceTransactionManager firstTransactionManager(DataSource firstDataSource) {
    return new DataSourceTransactionManager(firstDataSource);
}

@Bean
public DataSourceTransactionManager secondTransactionManager(DataSource secondDataSource) {
    return new DataSourceTransactionManager(secondDataSource);
}
只能使用此名称自动连线

@Autowire
private DataSource firstDateSource;

帮助添加

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
或者如果您使用@SpringBootApplication

@SpringBootApplication(scanBasePackages={"a.b.c"}, exclude = {DataSourceAutoConfiguration.class})

仍在获取由以下原因引起的错误
:org.springframework.beans.factory.nonuniquebeandDefinitionException:没有类型为“org.springframework.boot.autoconfigure.jdbc.DataSourceProperties”的合格bean可用:预期为单个匹配bean,但找到了5:
仅使用方法调用
HikariDataSource ds=firstDataSourceProperties()…
而不是将DataSourceProperty作为方法参数传递,这意味着解决了问题?我以为命名会解决重复bean的问题。。。我在同一个配置文件中有10个属性bean,都是独立使用的,只是不同的命名就足够了。请让我知道你的反馈,只添加一个排除就解决了这个问题?如果您不需要这些bean,为什么要在项目中包含它们呢?
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication(scanBasePackages={"a.b.c"}, exclude = {DataSourceAutoConfiguration.class})