如何为运行测试设置默认的Spring Boot配置文件(不使用环境变量)?

Tom*_*m G 1 spring heroku gradle build.gradle spring-boot

我有一个Spring Boot项目,使用gradle,有三个Spring配置文件:

  • "发展"(因为我正在发展)
  • "测试"(当我正在运行测试时)
  • "生产"(当它在生产中部署时[到heroku])

因此,我有四个应用程序*.yml文件:

  • application.yml(包含所有共享默认值)
  • 应用development.yml
  • 应用test.yml
  • 应用production.yml

这些环境都很好.问题是当我将代码部署到heroku时,heroku运行'gradle build'(反过来运行'gradle test'),而heroku没有设置环境变量的选项.因此我无法设置有效的配置文件.因此,当它运行测试时,它使用的是application.yml而没有application-test.yml中的覆盖.因此测试显然失败了.

到目前为止,我唯一的解决方案是将所有application-test.yml默认值放入application.yml,然后在其他配置文件中再次覆盖它们,但这显然远非理想.

有办法:

  • 从gradle中设置活动的Spring配置文件(请注意,我没有'test'或'build'任务的编辑权限,因为它们来自'spring boot gradle plugin')?
  • 或者在Spring Boot中有一种方法可以在运行测试时设置默认的活动Spring配置文件吗?

Dir*_*ann 11

认为joshiste的答案是正确的.

无论如何我猜你也可以SPRING_PROFILES_ACTIVE像这样设置环境变量:

 $ heroku config:set SPRING_PROFILES_ACTIVE=test
 Adding config vars and restarting myapp... done, v12
 SPRING_PROFILES_ACTIVE: test

 $ heroku config
 SPRING_PROFILES_ACTIVE: test

 $ heroku config:get SPRING_PROFILES_ACTIVE
 test

 $ heroku config:unset SPRING_PROFILES_ACTIVE
 Unsetting SPRING_PROFILES_ACTIVE and restarting myapp... done, v13
Run Code Online (Sandbox Code Playgroud)