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

时间:2015-01-18 06:21:19

标签: java spring spring-boot

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

  • CI测试 - > h2 mem
  • 开发者环境(可以是测试或应用程序运行) - > h2 mem,或h2文件,或postgres
  • 制作 - > postgres(理想情况下凭证未存储在git / war中)

目前我已经配置了运行应用程序的postgres,而h2配置为通过在application.properties s vs java/resource

中具有不同的test/resources来进行测试

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

2 个答案:

答案 0 :(得分:52)

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

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

例如:

  • application.properties - 常见配置
  • application-dev.properties - 开发配置文件的配置
  • application-ci.properties - ci个人资料的配置

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

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

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

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

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

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

答案 1 :(得分:1)

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