[英]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(例如,因為它具有重要的新功能),則您將強制同時更新所有微服務。 微服務的主要優勢之一是每個微服務都可以分別構建,更新和升級部署,因此您將失去系統的這種優勢。
做得好,但是,這可以讓您兩全其美。
但是, 不要試圖使用多模塊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.