【问题标题】:What is the difference between Profiles via Spring or via a build tool like Maven/Gradle通过 Spring 或通过 Maven/Gradle 等构建工具的配置文件有什么区别
【发布时间】:2021-05-12 04:11:26
【问题描述】:

我们目前正在开发一个基于 Spring Boot 的应用程序,并且我们有一个 QA 和一个 Prod 环境要部署。 我建议为不同的环境使用不同的应用程序属性文件,然后在 Docker 组合文件中使用 -Dspring.profiles.active 将是一个很好的分析解决方案。

但是,我的同事说,拥有基于构建工具的分析会是一个更好的主意。像这样的东西 - https://mkyong.com/maven/maven-profiles-example/

由于我在网上找不到足够的阅读材料,请帮助我了解这两种方式之间的优缺点。

【问题讨论】:

    标签: java spring-boot maven gradle


    【解决方案1】:

    比较 Spring 和 Mvn/Gradle 就是比较为不同事物设计的 2 个工具。

    但是,两者都允许您通过不同的机制提供配置。 Spring配置文件旨在用于在不同环境中部署应用程序,因此就用例和预期用途而言,您所描述的内容适合这一点。 (参考:https://docs.spring.io/spring-boot/docs/1.2.0.M1/reference/html/boot-features-profiles.html

    以下是使用 Spring 配置文件而不是构建工具的配置的几个优点 我想到了:

    • 无需重新构建应用程序即可切换配置文件
    • 可以调试应用程序本身而不是查看构建配置,这应该更容易

    【讨论】:

      【解决方案2】:

      我认为根据环境更改配置的最佳方法是使用外部配置服务器,服务将在启动时连接该服务器并获取适用于应用部署环境的配置。

      例如,您可以使用 spring-cloud-config 服务器并为每个环境创建不同的配置文件,并且在服务部署时,使用 spring 配置文件来了解正在部署应用程序的环境是什么并获得正确的配置:

      https://cloud.spring.io/spring-cloud-config/reference/html/

      【讨论】:

      • spring-cloud-config 是一个通用的解决方案,独立于应用程序的执行方式。但如果应用程序部署为 Docker 映像,最好重用本机配置工具(例如 Kubernetes)恕我直言。
      【解决方案3】:

      对于 Mvn/Gradle 配置文件,配置文件是在构建时选择的。因此,在 QA 接受后,您需要为 Prod 重建项目。

      使用 Spring,配置文件是在运行时选择的。您可以在 QA 或 Prod 上部署相同的 WAR 文件或 Docker 映像,但您只需要更改运行时配置文件,例如通过命令行 -Dspring.profiles.active=... 或通过环境变量 SPRING_PROFILES_ACTIVE=...,Spring 将在启动期间选择 application-qa.properties 或 application-prod.properties。

      我认为,在 Prod 或 QA 上拥有相同的 Docker 镜像肯定会更好。使用 Spring 配置文件的缺点是您在映像中包含 QA 和 Prod 的属性集,当您想要更改其中任何一个时,您必须重新构建整个 Docker 映像。

      第三种选择是根本不使用配置文件,而是将所有对于 QA 或 Prod 不同的属性外部化。例如,通过部署描述符设置 spring.datasource.url、用户名、密码等,而不是将其包含在 docker 映像中。这样,您可以在任何环境中重用相同的 Docker 映像,并即时重新配置它。此外,您可以根据需要对开发人员保密生产密码。

      @JArgente 的建议更进一步:在启动时从外部服务读取属性。但是,如果您可以通过 Kubernetes 环境变量来做到这一点,那可能有点过头了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-18
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        相关资源
        最近更新 更多