我有一个Spring Boot应用程序,我为其配置了两个数据源。到目前为止,我已在Application
类中配置了数据源(注释为@EnableAutoConfiguration
):
@Bean
@Primary
@ConfigurationProperties(prefix="datasource.db1")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="datasource.db2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
我还将配置值添加到application.properties
:
datasource.db1.url=...
...
datasource.db2.url=...
...
由于db1
是@Primary
数据源,因此默认选择它。如何告诉扩展JpaRepository
的界面应该使用db2
呢?
更新:提到我的存储库是一个界面。
答案 0 :(得分:0)
您可以从应用程序上下文中获取与辅助数据源关联的bean。
例如在Application.java
(我也使用Spring Boot)中你定义:
@Bean
@ConfigurationProperties(prefix="datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
并且在服务(这里用于调用存储过程)中,您有:
@Service
public class EngineImpl implements EngineDao {
private SetScartiProcedure setScarti;
@Autowired
public void init(ApplicationContext ctx) {
DataSource dataSource = (DataSource) ctx.getBean("secondaryDataSource");
this.setScarti = new SetScartiProcedure(dataSource);
}
public class SetScartiProcedure extends StoredProcedure {
...
}
答案 1 :(得分:0)
基于this,您可以通过这种方式定义多个DataSource
@Bean
public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(customerDataSource())
.packages(Customer.class)
.persistenceUnit("customers")
.build();
}
@Bean
public LocalContainerEntityManagerFactoryBean orderEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(orderDataSource())
.packages(Order.class)
.persistenceUnit("orders")
.build();
}
然后将它们中的每一个绑定到其中每个管理的不同类
@Configuration
@EnableJpaRepositories(basePackageClasses = Customer.class,
entityManagerFactoryRef = "customerEntityManagerFactory")
public class CustomerConfiguration {
...
}
@Configuration
@EnableJpaRepositories(basePackageClasses = Order.class,
entityManagerFactoryRef = "orderEntityManagerFactory")
public class OrderConfiguration {
...
}
存储库应该知道被出价给该类的DataSource
使用哪个数据库