如何使用Spring Boot提供不同的数据库配置?
我目前看到它有5个可能的数据库配置文件
- CI测试 – > h2 mem
- 开发人员环境(可以是测试或应用程序运行) – > h2 mem,或h2文件,或postgres
- 制作 – > postgres(理想情况下凭证不存储在git / war中)
目前我已经配置了运行应用程序的postgres,而h2配置为通过在java/resource
s vs test/resources
中使用不同的application.properties
进行test/resources
在这些情况下,更新数据库连接信息的最简单方法是什么?
正如M. Deinum在他的评论中提到的,最简单的方法是使用特定于配置文件的配置 。
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
对于unit testing,您可以在测试类上使用@ActiveProfiles("test")
注释告诉Spring应该使用测试配置文件运行unit testing。
此外,如果您不想将生产数据库凭据与源代码一起存储,则可以在生产中部署应用程序时指定外部配置文件:
- 使用命令行开关: –
--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 ---
有关进一步理解和简单示例,请参阅此链接。