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

2022-09-01 03:03:08

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

  • CI 测试 -> h2 内存
  • 开发人员环境(可以是测试或应用程序运行)-> h2 mem,h2 文件或 postgres
  • 生产 -> postgres(理想情况下,凭据不存储在 git/war 中)

目前,我已经配置了用于运行应用程序的postgres,并且h2配置为通过具有不同的s vs来进行测试application.propertiesjava/resourcetest/resources

对于这些方案,更改数据库连接信息的最简单方法是什么?


答案 1

正如 M. Deinum 在他的评论中提到的,最简单的方法是使用特定于配置文件的配置

Spring Boot 允许您有一个通用配置文件 (),然后是多个其他文件,每个文件都特定于一个配置文件 ()。application.propertiesapplication-${profile}.properties

例如:

  • application.properties- 通用配置
  • application-dev.properties- 开发人员配置文件的配置
  • application-ci.properties- ci 配置文件的配置

例如,如果您的应用程序使用“ci”配置文件运行,则将加载默认配置文件以及 ci 配置文件(将包含 ci 配置文件的数据源配置属性)。

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

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

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

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

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

答案 2

上述方案的紧凑答案是创建单个 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

    ---

有关进一步理解和简单示例,您可以参考此链接。


推荐