5 回答
TA贡献2019条经验 获得超9个赞
如果您真的想这样做,您可以使用Maven构建您的单独应用程序(微服务),使用父 POM 和 Maven 的依赖管理功能(依赖管理与 Depdencies 不同)来控制使用哪个版本的 Spring Boot。
但是,您不应该严格要求所有微服务都使用相同版本的 Spring Boot。如果你这样做了,并且其中一个微服务必须使用更新版本的 Spring Boot(例如,因为它有一个关键的新特性),那么你就是在强制所有微服务同时更新。微服务的主要优势之一是每个微服务都可以单独构建、更新和部署升级,因此您将剥夺您的系统的这种优势。
但是,如果做得好,这可以为您带来两全其美的效果。
旧的微服务可以继续使用旧版本的父 POM。
新的和更新的微服务可以使用新版本的父 POM。
很容易看出微服务是否使用(非常)旧版本的父 POM,因此应该更新。
父 POM 的当前版本可以指示您认为使用哪些版本的依赖项是“最佳实践”。
但是,不要试图使用多模块 Maven 结构,因为那样会强制微服务使用相同的 Spring Boot 版本,这会在每个微服务的构建中引入过多的耦合。
TA贡献1831条经验 获得超9个赞
虽然“独立性”确实是微服务环境中的一个重要价值,但这并不意味着猖獗的代码重复是首选。选择两害相权取其轻,创建一个仅包含 pom 文件(无 java 代码)的父项目,并让所有微服务使用这个 pom 作为其父 pom。在这个父 pom 文件中,您可以使用标签声明所有依赖项的<dependencyManagement>
所有版本以及使用标签声明插件的所有版本<pluginManagement>
。这些标签实际上并没有向您的实际项目添加任何依赖项或插件,它只是声明了项目过于依赖它们时要使用的版本。
如果你已经在使用 spring-boot-starter pom 作为你的父级,这可以传递:你的微服务有你的父级 pom,你的父级 pom 有 spring boot starter pom 作为它自己的父级。
如果在未来某个时候,一个微服务需要从这个父 pom 中分离出一个或多个特定依赖项,您可以在该项目的 pom 中声明新版本,而这些值将被使用,有效地覆盖父 pom 中声明的内容( s),因此您不会失去这种灵活性。
然而,我们已经使用 Spring Boot 微服务两年了,同时保持环境一致和易于升级已证明对我们来说比独立更有价值。
TA贡献1824条经验 获得超5个赞
如果可以,如何管理?
使用 Maven/Gradle 父 pom 定义微服务项目将继承的所有版本和依赖项。
这是一个好习惯吗?
是的,有一定的衡量标准。
这是个好主意,因为通过您开发/维护的一组项目使用一致的依赖版本是个好主意。
但这并不意味着所有项目都会在 N 时刻使用相同版本的父 pom,但理想情况下,它们应该倾向于使用最新版本,就像你的父 pom 的最后一个版本一样使用 Spring Boot 的最后一个稳定版本。
TA贡献1820条经验 获得超2个赞
对于每个微服务,它们应该有自己的版本。每个微服务都应该有自己的升级周期。如果您最终创建了一个检测 Spring Boot 版本的通用项目。不同的微服务无法继续利用 Spring 中的新功能以及其他可能依赖于特定 Spring 版本的框架
TA贡献2021条经验 获得超8个赞
作为一种选择,如果您使用私有 Maven 存储库,您可以为您使用的所有 Spring 库安装一个版本的工件(甚至更多,您可以将它们全部标记为自定义版本)。然后在您的所有项目中,只需在依赖项中使用此标记即可。
添加回答
举报