【问题标题】:How do I set the default Spring Boot profile for running tests (without using environment variables)?如何为运行测试设置默认的 Spring Boot 配置文件(不使用环境变量)?
【发布时间】:2023-04-10 04:32:01
【问题描述】:

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

  • “开发”(用于开发时)
  • “test”(当我运行测试时)
  • “生产”(用于在生产中部署时 [到 heroku])

因此我有四个 application*.yml 文件:

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

这些环境都可以正常工作。问题是,当我将代码部署到 heroku 时,heroku 运行“gradle build”(进而运行“gradle test”),而 heroku 没有设置环境变量的选项。因此我无法设置活动配置文件。因此,当它运行测试时,它使用的是 application.yml,而没有 application-test.yml 中的覆盖。因此,测试显然失败了。

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

有没有办法:

  • 从 gradle 中设置活动 Spring 配置文件(请注意,我没有对来自“spring boot gradle 插件”的“测试”或“构建”任务的编辑权限)?
  • 或者在 Spring Boot 中是否有办法在运行测试时设置默认的活动 Spring 配置文件?

【问题讨论】:

    标签: spring heroku gradle spring-boot build.gradle


    【解决方案1】:

    认为 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
    

    【讨论】:

    • 感谢您的帮助。但这并不是我所需要的,因为这也会影响正在运行的应用程序;而我只希望在运行测试时设置“测试”配置文件(作为部署过程的一部分)
    【解决方案2】:

    如果您使用的是@WebIntegrationTest@IntegrationTest,您可以使用注释将配置文件设置为属性值。

    看起来像这样:

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebIntegrationTest({"spring.profiles.active=test"})
    public class MyWebIntegrationTests {
        // ...
    } 
    

    【讨论】:

    • 完美运行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多