【问题标题】:How to use same jpa repository with multiple databases using spring boot [duplicate]如何使用Spring Boot将相同的jpa存储库与多个数据库一起使用[重复]
【发布时间】:2018-03-07 10:32:01
【问题描述】:

我有两个数据库环境,一个用于开发,一个用于测试。

两个数据库具有相同的表结构。我想显示来自特定环境的数据。环境名称将在运行时传递。

如何在 diff 环境中使用 spring boot 相同的 jpa 存储库?

【问题讨论】:

  • 听起来您需要为映射到特定数据库(测试或产品...)的应用程序指定运行时环境变量。例如export APPLICATION_ENVIRONMENT=test
  • 我已经创建了默认连接到开发环境的 jpa 存储库类。我也想为测试环境使用相同的存储库类。所以通过同样的方式,我将能够连接到多个环境,如 prod、Uat 等
  • 不要忘记接受/支持对您有帮助的答案...

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


【解决方案1】:

您可以尝试使用 spring boot 配置文件:Spring Profiles 提供了一种分离应用程序配置部分并使其仅在某些环境中可用的方法。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

http://www.baeldung.com/spring-profiles

【讨论】:

  • 在最后阶段,我的应用程序将部署到一个地方,我将有环境下拉列表,其中包含值 dev、testing。当我选择测试并回车时,它应该重用相同的存储库类、接口、实体并返回数据
【解决方案2】:

您需要将数据库级别的属性外部化为将从固定文件系统路径读取的某个属性文件。此属性文件不应是创建的 war/jar 的一部分。您可以在启动应用程序时更改属性文件的值。这样,如果数据库环境属性有任何变化,您就不需要每次都进行构建。在任何时候都非常容易连接到任何新环境。

【讨论】:

    【解决方案3】:

    您可以使用SPRING_PROFILES_ACTIVE env. variable 在运行时控制您的应用配置文件。

    不要忘记向您的应用添加与您的 Spring 配置文件相关的不同道具文件,例如:

    /model
    /repositories
    /resources
      - application.properties // common properties for both 'dev' and 'prod' profiles
      - application-dev.properties // 'dev' profile properties, for example - of your H2 database
      - application-prod.properties // 'prod' profile properties, for example - of your prod PostgreSQL database
    

    请注意,您也可以像这样运行您的应用程序:

    java -jar -Dspring.profiles.active=dev target/my-app.jar
    java -jar target/my-app.jar --spring.profiles.active=dev
    

    在您的 IDE 中设置您的活动配置文件(example)以在 IDE 中使用此配置文件运行应用程序。

    application.properties 中设置您的“默认”配置文件:

    spring.profiles.active=dev
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2019-05-08
      • 2021-12-13
      相关资源
      最近更新 更多