簡體   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