我使用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会使用什么?
答案 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
注释。