通过Spring和通过Maven/Gradle这样的构建工具构建profile有什么区别?



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

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

请帮助我了解这两种方法的优缺点,因为我在网上找不到足够的阅读材料。

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

使用Spring,概要文件是在运行时选择的。您可以在QA或Prod上部署相同的WAR文件或Docker映像,但您只需要更改运行时配置文件,例如通过命令行- spring.profiles.active=…或者通过环境变量SPRING_PROFILES_ACTIVE=…, Spring将选择application-qa。属性或应用程序。属性。

在Prod或QA上使用相同的Docker映像肯定更好,我认为。使用Spring配置文件的缺点是你在镜像中包含QA和Prod的属性集,当你想改变其中任何一个时,你将不得不重建整个Docker镜像。

第三种选择是根本不使用概要文件,而是将QA或Prod不相同的所有属性具体化。例如,设置spring.datasource。Url,用户名,密码等,通过一个部署描述符,而不是包括在你的docker镜像。这样,您就可以在任何环境中重用相同的Docker映像,并动态地重新配置它。此外,如果你愿意,你可以对开发人员保密生产密码。

@JArgente的建议甚至更进一步:在启动时从外部服务读取属性。但如果你可以通过Kubernetes环境变量来实现,那么这可能是多余的。

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

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

与构建工具的配置相比,使用Spring配置文件有几个优点我想到:

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

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

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

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

最新更新