【问题标题】:Spring boot only uses primary datasource with two datasourcesSpring boot 仅使用具有两个数据源的主数据源
【发布时间】:2021-05-26 14:26:00
【问题描述】:

我在 Spring Boot 中有两个 MySQL 数据源,因此我有两个配置类。但看起来它只使用主数据源。所有实体都是为主数据源创建的,所以 crawlerdb 和 userdb 实体都是在 userdb 中创建的。

我的用户数据库主配置:

/**
 * Data source for the MySQL User Database schema
 */
@Configuration
@EntityScan(basePackages = "cs.crawler.server.projectcs.domain.userdb")
@EnableJpaRepositories(basePackages = "cs.crawler.server.projectcs.repos.userdb")
@EnableTransactionManagement
public class UserDomainConfig {

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.users")
    public DataSourceProperties userDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.users.configuration")
    public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
        return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

}

我的二级爬虫配置:

/**
 * Data source for the MySQL crawler database schema
 */
@Configuration
@EntityScan(basePackages = "cs.crawler.server.projectcs.domain.crawlerdb")
@EnableJpaRepositories(basePackages = "cs.crawler.server.projectcs.repos.crawlerdb")
@EnableTransactionManagement
public class CrawlerDomainConfig {

    @Bean
    @ConfigurationProperties("spring.datasource.crawler")
    public DataSourceProperties crawlerDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.crawler.configuration")
    public HikariDataSource secondDataSource(DataSourceProperties secondDataSourceProperties) {
        return secondDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

}

两个模式的实体类位于不同的包中,如类名上方的@EntityScan 所示。但是,当我检查 MySQL 工作台中创建的架构时,我发现所有实体都是在 userdb 中创建的。

【问题讨论】:

  • All entities are created for the primary datasource 这是预期的行为。如果您希望您的服务使用不同的数据源,您必须明确地将它们自动装配到这些服务中。

标签: java mysql spring spring-boot


【解决方案1】:

我通过像这篇文章这样更改配置文件来解决我的问题:

https://springframework.guru/how-to-configure-multiple-data-sources-in-a-spring-boot-application/

【讨论】:

    最近更新 更多