Java Spring启动应用程序中的两个数据源
我有一个Spring Boot应用程序,我为它配置了两个数据源。到目前为止,我已经在我的Java Spring启动应用程序中的两个数据源,java,spring,spring-data,spring-boot,spring-data-jpa,Java,Spring,Spring Data,Spring Boot,Spring Data Jpa,我有一个Spring Boot应用程序,我为它配置了两个数据源。到目前为止,我已经在我的应用程序类中配置了数据源(用@EnableAutoConfiguration注释): 我还将配置值添加到application.properties: datasource.db1.url=... ... datasource.db2.url=... ... 由于db1是@主数据源,因此默认情况下选择它。如何告诉扩展JpaRepository的接口它应该使用db2 更新:提到我的存储库是一个接口。您可以从应
应用程序
类中配置了数据源(用@EnableAutoConfiguration
注释):
我还将配置值添加到application.properties
:
datasource.db1.url=...
...
datasource.db2.url=...
...
由于db1
是@主
数据源,因此默认情况下选择它。如何告诉扩展JpaRepository
的接口它应该使用db2
更新:提到我的存储库是一个接口。您可以从应用程序上下文中获取与辅助数据源关联的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 {
...
}
基于此,您可以通过这种方式定义多个数据源
@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 {
...
}
存储库应该知道向该类提交的
数据源
要使用哪个数据库您可以使用不同的persistence单元吗?请看这里:我不确定如何将这种方法用于存储库接口,Spring使用这种方法自动生成实现。我想这里有一个简单的例子:@Patrick:太晚了半分钟。我也发现。。。谷歌首次点击“spring数据多数据源”可能重复:
@Configuration
@EnableJpaRepositories(basePackageClasses = Customer.class,
entityManagerFactoryRef = "customerEntityManagerFactory")
public class CustomerConfiguration {
...
}
@Configuration
@EnableJpaRepositories(basePackageClasses = Order.class,
entityManagerFactoryRef = "orderEntityManagerFactory")
public class OrderConfiguration {
...
}