繁体   English   中英

如何在所有微服务中维护相同的Spring Boot版本?

[英]How to maintain same Spring Boot version across all microservices?

我正在使用微服务架构创建一个应用程序。 我想知道我们是否可以在所有微服务中管理相同的Spring Boot版本。 我只是不想在创建新的微服务时在pom.xml中提及Spring Boot版本。 如果我们可以在一个位置管理Spring Boot版本,那么它将确保所有微服务都使用相同的Spring Boot版本,并且为所有微服务轻松升级。

如果可能的话如何管理?

这是一个好习惯吗?

如果可能的话如何管理?

使用Maven / Gradle父pom定义微服务项目将继承的所有版本和依赖项。

这是一个好习惯吗?

是的,在一定程度上。
这是一个好主意,因为在您开发/维护的一组项目中使用一致的依赖项版本是一个好主意。
但这并不意味着所有项目都将在N瞬间使用相同版本的父pom,但理想情况下,它们应该倾向于使用最新版本,其方式与父pom的最新版本相同使用Spring Boot的最后一个稳定版本。

如果您确实想这样做,则可以使用Maven来构建单独的应用程序(微服务),使用父POM和Maven的Dependency Management功能( Dependency Management与Depdencies不同 )来控制使用哪个版本的Spring Boot。

但是,你应该严格要求所有的微服务使用Spring启动的同一版本。 如果这样做,并且其中一个微服务必须使用较新版本的Spring Boot(例如,因为它具有重要的新功能),则您将强制同时更新所有微服务。 微服务的主要优势之一是每个微服务都可以分别构建,更新和升级部署,因此您将失去系统的这种优势。

做得好,但是,这可以让您两全其美。

  • 旧的微服务可以继续使用父POM的旧版本。
  • 新的和更新的微服务可以使用新版本的父POM。
  • 很容易看出微服务是否使用了(非常旧的)父POM版本,因此应该对其进行更新。
  • 父POM的当前版本可以指示您将哪个版本的依赖项视为“最佳实践”。

但是, 不要试图使用多模块Maven结构 ,因为那样您将迫使微服务使用相同的Spring Boot版本,这会在每个微服务的构建中引入过多的耦合。

尽管在微服务领域中“独立性”确实是重要的价值,但这并不意味着优先使用猖ramp的代码复制。 选择两个弊端中的较小者,并创建一个仅包含pom文件(不包含Java代码)的父项目,然后让所有微服务将此pom用作其父pom。 在此父pom文件中,您可以使用<dependencyManagement>标记声明所有依赖项的所有版本,并使用<pluginManagement>标记声明插件的所有版本。 这些标记实际上并未在您的实际项目中添加任何依赖项或插件,而只是声明了如果项目过于依赖它们时要使用的版本。

如果您已经使用spring-boot-starter pom作为其父级,则可以过渡地工作:您的微服务具有您的父pom,而您的父pom将spring boot starter pom作为其自己的父级。

如果将来某个时刻某个微服务需要与该父pom偏离一个或多个特定的依赖关系,则可以在该项目的pom中声明新版本,然后将使用这些值,从而有效覆盖父pom中声明的内容( s),这样您就不会失去这种灵活性。

但是,我们已经使用Spring Boot微服务两年了,事实证明,保持格局一致并易于同时升级对我们而言比拥有独立性更有价值。

对于每个微服务,它们应具有自己的版本。 每个微服务应具有自己的升级周期。 如果最终创建了一个用于检测Spring Boot版本的公共项目。 不同的微服务无法继续利用Spring的新功能以及可能依赖于特定Spring版本的其他框架

作为一种选择,如果您使用私有Maven存储库,则可以为所使用的所有Spring库安装一个版本的构件(甚至可以将它们标记为自定义版本)。 然后,在所有项目中,只需在依赖项中使用此标记即可。

微服务中没有这样的东西,您在创建任何新的微服务时需要知道并保持相同的版本。

您应该使用父/子pom.xml。 pom帮助文档

定义一个父pom文件,并在那里声明所有版本(在properties标签中)。 就像是:

<properties>
  <spring.version>5.0.5.RELEASE</spring.version>
  <.....>
</properties>

并且,在每个项目中,使用该父pom,并在声明依赖项时使用类似以下内容的东西:

<dependency>
  <groupod>xyz</groupid>
  <artifactid>xyz</artifactid>
  <version>${spring.version}</version>
</dependency>

当您要升级一组库时,这将很有帮助,您只需在一个位置进行更新,然后重新构建所有项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM