3

我使用弹簧启动应用程序。我通过 JDBC 数据源和存储库从数据库中选择数据。JDBS 的一些查询和 Repositories 的一些查询。我的数据库配置 RAC 并有 2 个实例。我通过连接到 db,129.0.0.2但这个 URL 在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

但是当我执行存储库查询时会使用什么数据源?

4

1 回答 1

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注解。

于 2017-01-11T15:03:52.587 回答