具有多个数据库和application.yml的JPA

时间:2018-08-27 03:19:23

标签: spring-boot jpa spring-data-jpa

我的应用程序(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)分配给他们的数据库?

1 个答案:

答案 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包的数据源,不需要在存储库上添加注释。