我的应用程序(spring-boot)需要访问多个数据库。 出于某种原因,我无法使用application.yml
找到合适的示例此示例:http://smasue.github.io/spring-yml-datasources -> application.yml,但不是jpa
此示例:https://www.baeldung.com/spring-data-jpa-multiple-databases -> jpa,但不是application.yml
因此,我基于此gs创建了一个非常简单的项目:https://spring.io/guides/gs/accessing-data-jpa/
您可以在这里找到我的简单示例:https://github.com/Tyvain/JpaMultipleDatabaseAndApplicationYml
spring:
datasource:
db-1:
url: jdbc:postgresql://10.10.100.100:5432/db1
username: db1
password: db1
driver-class-name: org.postgresql.Driver
db-2:
url: jdbc:postgresql://10.10.100.100:5432/db2
username: db2
password: db2
driver-class-name: org.postgresql.Driver
从这里,我不确定如何影响我的存储库到每个数据库。 https://www.baeldung.com/spring-data-jpa-multiple-databases这个示例尚不清楚,因为它基于属性...而且我不确定如何适应所有代码
@PropertySource({ "classpath:persistence-multiple-db.properties" })
[...]
properties.put("hibernate.hbm2ddl.auto",
env.getProperty("hibernate.hbm2ddl.auto"));
properties.put("hibernate.dialect",
env.getProperty("hibernate.dialect"));
您如何将每个存储库(CustomerRepositoryDB1和CustomerRepositoryDB2)分配给他们的数据库?
答案 0 :(得分:1)
属性和yaml是两种绝对相等的配置方式。格式只有一点不同。
您可以将foo.properties
替换为foo.yml
和
com.foobar.var1=value
com.foobar.var2=value2
简单地变成
com.foobar:
var1: value
var2: value2
另外,在Github上有一个官方的Spring Data Repository,上面有很多例子。甚至有一个带有两个数据源的数据源,都完全用代码配置,不需要Yaml或属性:
https://github.com/spring-projects/spring-data-examples/tree/master/jpa/multiple-datasources
在Application.java
中,它们排除了AutoConfig类,然后在每个包(订单,客户)中,都有一个Config类,用于配置数据源。然后,无需在存储库本身上设置数据源,这是通过使用以下程序包扫描来处理的:
factoryBean.setPackagesToScan(OrderConfig.class.getPackage().getName());
在配置中。重申一下:它是每个 java包的数据源,不需要在存储库上添加注释。