【问题标题】:Spring Boot Jenkins CD/CI Change profile before deploymentSpring Boot Jenkins CD/CI 部署前更改配置文件
【发布时间】:2019-02-04 13:58:36
【问题描述】:

我有一个 Spring Boot Web 应用程序,我需要使用 Jenkins 将其部署到 Tomcat。

我已经设置了管道并且部署正常。

但是,我的应用程序中有两个配置文件。一个用于开发,另一个用于生产。每个配置文件的一些属性(如 DB URL 等)都不同。

所以,我在src/main/resources 中有两个属性文件,如下所示:

application-dev.properties
application-prod.properties

另外,我在同一目录中有另一个 application.properties,它只有一个属性(活动配置文件的属性)

spring.profiles.active=dev

现在,当我通过 Eclipse 运行它时,一切正常。即使 Jenkins 将 WAR 部署到 tomcat,一切都很好,除了一个问题。在部署到 Tomcat 之前,我无法将 spring.profiles.active 的值更改为 prod

目前,我的 SVN 使用 spring.profiles.active = prod 提交了 application.properties 文件

当有人签出代码并在他们的本地环境中工作时,他们将其更改为“dev”并继续工作,他们只是不将此更改提交给 SVN。这是我遵循的临时解决方法,我觉得可以以更有效的方式完成。

我如何拥有相同的 WAR 文件并且只需更改配置文件而无需修改我的 application.properties 文件?这可以在詹金斯完成吗?还是我应该去别的地方看看??

谢谢, 斯里拉姆斯里达兰

【问题讨论】:

    标签: spring-boot tomcat jenkins


    【解决方案1】:

    第一步是从属性文件中删除硬编码的配置文件名称,然后您可以通过设置通过环境变量控制要激活的配置文件 SPRING_PROFILES_ACTIVE=dev。与在属性文件中设置spring.profiles.active=dev 相同。

    【讨论】:

    • 谢谢。当我通过更改运行配置在 eclipse 中尝试时,此解决方案有效。那么如何在位于远程服务器中的 Tomcat 中执行此操作?请注意,远程服务器可以运行多个 Tomcat 实例,这些实例可能需要服务于不同的环境。在这种情况下,我无法设置环境变量。我可以为特定的 tomat 实例设置属性吗?
    • 如果您有多个 tomcat 并且不想使用环境变量,我看到的唯一选择是通过在 catalina.sh/startup.sh 中使用 JAVA_OPTS 设置配置文件,例如 -Dspring.profiles.active=dev
    • 谢谢,这在我使用 startup.sh / startup.bat 启动 Tomcat 时有效。但是,当我将 Tomcat 作为服务启动时(在 Windows 上),它似乎不起作用。如果我想将 tomcat 作为服务启动,是否需要更新其他文件?
    • 你能看看这个帖子吗? stackoverflow.com/a/47211614/1891456
    【解决方案2】:

    如果您使用的是 Spring Boot 应用程序,那么在运行该应用程序之前,您应该提供 -Dspring.profiles.active=prod。默认情况下,spring 环境变量会覆盖属性文件中的配置。 但我同意 yogesh 给出的答案,即不应在应用程序中对配置文件进行硬编码。

    现在,当开发人员检查代码时,他们还可以提供 -Dspring.profiles.acitve=dev 作为 eclipse 或 intellij 运行配置中的参数。

    这是 eclipse/intellij 中的一次性配置更改,效果非常好。 我们在我们的项目中使用它,它真的很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多