如何在SpringBoot中为不同的DataSource配置JPA存储库?

时间:2017-01-11 06:38:57

标签: java spring-boot spring-data-jpa datasource spring-repositories

我使用spring boot app。我通过JDBC DataSource和Repositories从DB中选择数据。 JDBS的一些查询和存储库的一些查询。我的数据库配置RAC并有2个实例。我通过129.0.0.2连接到数据库,但此网址在129.0.0.3(1 instance) and 129.0.0.4(2instance)之间平衡。所有查询都使用129.0.0.2执行,但我需要在一个实例上执行一些查询。我创建了3个数据源:

@Bean(name = "primary")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "second")
    @ConfigurationProperties(prefix = "spring.secondDatasource")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "three")
    @ConfigurationProperties(prefix = "spring.threeDatasource")
    public DataSource threeDataSource() {
        return DataSourceBuilder.create().build();
    }

并在application.properties中配置它们。然后我可以写

@Qualifier("primary")DataSource dataSource

@Qualifier("second")DataSource dataSource

但是当我执行存储库查询时,DataSource会使用什么?

1 个答案:

答案 0 :(得分:1)

创建两个配置类,如下所示:

@Configuration
@EnableJpaRepositories(basePackages = "your.package.repositories.datasource1", 
   entityManagerFactoryRef = entityManagerFactory1)
class DataSource1Configuration {

  @Bean
  public EntityManagerFactory entityManagerFactory1(@Qualifier("primary") DataSource primary) {
    // … create entity manager factory based on primary source
  }
}

第二个配置类显然是相似的,但是可以使用辅助数据源

顺便说一句,从Java 8开始,也可能在同一个类上有两个类型注释(在这种情况下为两个@EnableJpaRepositories)。所以它也可以使用一个配置类,但是有两个@EnableJpaRepositories注释。