Spring boot 如何在spring中使用第二个数据源?

Spring boot 如何在spring中使用第二个数据源?,spring-boot,datasource,spring-repositories,Spring Boot,Datasource,Spring Repositories,我在这里下载了示例代码 但我仍然不明白存储库是如何连接到数据源的。即使在查看config类时,它也不会引用存储库。在存储库界面内,它不引用数据源或配置 因此,当您使用两个不同的存储库进行保存时,它如何知道每次回购要转到哪个数据源呢?在存储库中,使用您链接的示例,每个配置类都用@EnableJpaRepositories进行注释,该类只在注释类和子包的包中扫描存储库-这就是数据源和存储库之间的关系发生的地方 注意配置(注释为/*重要*/) 在 @配置 /*重要的*/ @EnableJParepo

我在这里下载了示例代码

但我仍然不明白存储库是如何连接到数据源的。即使在查看config类时,它也不会引用存储库。在存储库界面内,它不引用数据源或配置


因此,当您使用两个不同的存储库进行保存时,它如何知道每次回购要转到哪个数据源呢?

在存储库中,使用您链接的示例,每个配置类都用
@EnableJpaRepositories
进行注释,该类只在注释类和子包的包中扫描存储库-这就是数据源和存储库之间的关系发生的地方

注意配置(注释为/*重要*/)

@配置
/*重要的*/
@EnableJParepositions(entityManagerFactoryRef=“orderEntityManagerFactory”,
transactionManagerRef=“orderTransactionManager”)
类OrderConfig{
@豆子
PlatformTransactionManager订单TransactionManager(){
返回新的JpaTransactionManager(orderEntityManagerFactory().getObject());
}
@豆子
LocalContainerEntityManagerFactoryBean orderEntityManagerFactory(){
HibernateJavaEndorapter vendorAdapter=新的HibernateJavaEndorapter();
vendorAdapter.setGenerateDdl(真);
LocalContainerEntityManagerFactoryBean factoryBean=新的LocalContainerEntityManagerFactoryBean();
/*重要的*/
setDataSource(orderDataSource());
setJpaVendorAdapter(vendorAdapter);
setPackagesToScan(OrderConfig.class.getPackage().getName());
返回factoryBean;
}
@豆子
DataSource orderDataSource(){
返回新的EmbeddedDatabaseBuilder()//
setType(EmbeddedDatabaseType.HSQL)//
setName(“订单”)//
build();
}
}
以及

@配置
/*重要的*/
@启用JParepositions(entityManagerFactoryRef=“customerEntityManagerFactory”,
transactionManagerRef=“customerTransactionManager”)
类CustomerConfig{
@豆子
PlatformTransactionManager客户事务管理器(){
返回新的JpaTransactionManager(customerEntityManagerFactory().getObject());
}
@豆子
LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(){
HibernateJpaVendorAdapter=新的HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factoryBean=新的LocalContainerEntityManagerFactoryBean();
/*重要的*/
setDataSource(customerDataSource());
setJpaVendorAdapter(jpaVendorAdapter);
setPackagesToScan(CustomerConfig.class.getPackage().getName());
返回factoryBean;
}
@豆子
数据源customerDataSource(){
返回新的EmbeddedDatabaseBuilder()//
setType(EmbeddedDatabaseType.HSQL)//
setName(“客户”)//
build();
}
}
最后是中的
@Transactional
注释

/*重要信息*/
@事务(“customerTransactionManager”)
public CustomerId initializeCustomer(){
return customers.save(新客户(“Dave”、“Matthews”).getId();
}
使用
customerTransactionManager
,该管理器在
CustomerConfig

以及

/*重要信息*/
@事务(“orderTransactionManager”)
公共订单初始化订单(CustomerId客户){
Assert.notNull(customer,“客户标识符不能为null!”);
订单=新订单(客户);
添加(新的行项目(“莱克伍德吉他”);
返回订单。保存(订单);
}
使用在
OrderConfig
中配置的
orderTransactionManager


基本上,您正在配置不同的
数据源
,不同的
实体管理器
,不同的
TransactionManager
,并根据您的选择专门引用它们。

我认为,由于每个配置类中定义了包组件扫描,所以repo是基于同一个包中的配置类配置的?这设计太奇怪了,为什么?如果我的回购协议分散在许多不同的包中,会怎么样?我必须为每个人创建一个配置,即使我希望他们都使用相同的配置?如果我不创建配置,它会使用默认值吗?所以repo是基于同一个包中的配置类配置的?这设计太奇怪了,为什么?如果我的回购协议分散在许多不同的包中,会怎么样?我必须为每个人创建一个配置,即使我希望他们都使用相同的配置?如果我不创建配置,它是否会以某种方式使用默认值?