首页 > 解决方案 > Spring boot 仅使用具有两个数据源的主数据源

问题描述

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

标签: javamysqlspringspring-boot

解决方案


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

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


推荐阅读