如何使用 Spring Boot 提供不同的数据库配置?

How can I provide different database configurations with Spring Boot?

正如我目前看到的那样,我有 5 个可能的数据库配置文件

目前我为 运行 应用程序配置了 postgres,并通过在 java/resources 与 test/resources[=14 中使用不同的 application.properties 配置了 h2 进行测试=]

在这些情况下更改数据库连接信息的最简单方法是什么?

正如 M. Deinum 在他的评论中提到的那样,最简单的方法是使用 profile specific configuration.

Spring 引导允许您拥有一个通用配置文件 (application.properties),然后是多个其他文件,每个文件都特定 cific 到一个配置文件 (application-${profile}.properties) .

例如:

  • application.properties - 常用配置
  • application-dev.properties - 开发配置文件的配置
  • application-ci.properties - ci 配置文件的配置

如果您的应用程序 运行s 具有 "ci" 配置文件,例如,默认配置文件以及 ci 配置文件(它将包含 ci 配置文件)将被加载。

要切换配置文件,您可以使用以下选项之一:

  • JVM 属性: -Dspring.profiles.active=ci
  • 命令行开关:--spring.profiles.active=dev

对于单元测试,您可以在测试中使用 @ActiveProfiles("test") 注释 类 来告诉 Spring 单元测试应该 运行 和测试配置文件。

此外,如果您不想将生产数据库凭据与源代码一起存储,则可以在生产中部署应用程序时选择cify 外部配置文件:

  • 使用命令行开关:--spring.config.location=/srv/myapp/config.properties
  • 使用 JVM 属性:-Dspring.config.location=/srv/myapp/config.properties

上述情况的紧凑答案是创建单个 application.yml 文件并根据要求创建不同的配置文件,在您的情况下为 -dev、-ci 和 -prod 并提供相应的数据库信息。

示例是:

spring:
  profiles.active: development

---
spring:
  profiles: development
datasource:
  db-person:
      url: jdbc:oracle:thin:@db_person_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual
  db-contract:
      url: jdbc:oracle:thin:@db_contract_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: test
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: production
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

为了进一步理解和简单的例子,你可以参考这个link.