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

Spring multiple datasource without primary

我有问题,我需要创建两个 DataSource 但我不能使用 @Primary 因为在其他模块中我也有两个 DataSource 然后在第三个模块中我包括两个模块,所以有两个主要模块。

我想使用 @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);
}

我得到的错误是:

No qualifying bean of type 'org.springframework.boot.autoconfigure.jdbc.DataSourceProperties' available: expected single matching bean but found 5: secondDataSourceProperties,firstDataSourceProperties,3DataSourceProperties,4DataSourceProperties,spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties

我在代码中使用 DataSource

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

@Transactional(value = "firstTransactionManager")

仅执行以下操作怎么样?没有 @Qualifier 一团糟? @Bean 的方法名称默认用作 bean 的 "qualifier"。

@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;

@Transactional("secondTransactionManager")

帮助添加

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

或者如果你使用@SpringBootApplication

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