如何使用 Spring Boot 提供不同的数据库配置?
How can I provide different database configurations with Spring Boot?
正如我目前看到的那样,我有 5 个可能的数据库配置文件
- CI 测试 -> h2 内存
- 开发者环境(可以是test或app 运行)-> h2 mem,或h2文件,或postgres
- production -> postgres(最好凭据不存储在 git/war)
目前我为 运行 应用程序配置了 postgres,并通过在 java/resource
s 与 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.
正如我目前看到的那样,我有 5 个可能的数据库配置文件
- CI 测试 -> h2 内存
- 开发者环境(可以是test或app 运行)-> h2 mem,或h2文件,或postgres
- production -> postgres(最好凭据不存储在 git/war)
目前我为 运行 应用程序配置了 postgres,并通过在 java/resource
s 与 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.