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

xen*_*ide 33 java spring spring-boot

我目前看到它有5个可能的数据库配置文件

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

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

在这些场景中更改数据库连接信息的最简单方法是什么?

Boh*_*rdt 56

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

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

例如:

  • application.properties - 通用配置
  • application-dev.properties - 配置dev配置文件
  • 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

  • 如何为每个配置文件拥有不同的data.sql文件? (2认同)