SpringCloud版本規則和原理和在具體項目中的使用


  伴隨着微服務框架的流行,SpringCloud項目也變得越來越龐大,由於它是由諸多子項目組成,為了更好管理SpringCloud的發布版本與各個子項目的版本關系,SpringCloud采用了一種新的版本規則來控制整個SpringCloud的版本發布。先來了解下SpringCloud的幾個相關網址:

  項目主頁:https://spring.io/projects/spring-cloud   

  各個子項目的github地址: https://github.com/spring-cloud

       在子項目中有一個spring-cloud-release子項目,項目地址 https://github.com/spring-cloud/spring-cloud-release ,該項目的作用就是管理SpringCloud版本的發布,主要做了二件事,一個是分布版本的規則,二是管理各個發布版本的子項目的版本的映射關系。下面就兩方面進行分析。

一.發布版本的命名規則

發布版本不采用通常的版本號的方式,而是采用英國倫敦的地鐵站名的站名(按字母順序)來命名發布的版本名稱。不過這個版本名稱后面還會以.xxx 的形式加一個額外的版本說明,

這個說明通常是以下形式:

SNAPSHOT: 快照版本,隨時可能修改

M: MileStone,M1表示第1個里程碑版本,一般同時標注PRE,表示預覽版版。

SR: Service Release,SR1表示第1個正式版本,一般同時標注GA:(GenerallyAvailable),表示穩定版本。

例如當一個版本的Spring Cloud項目的發布內容積累到臨界點或者解決了一個嚴重bug后,就會發布一個“service releases”版本,簡稱SRX版本,其中X是一個遞增數字。這個SRX會以 .形式跟在版本名稱的后面。

按如下規則,當前最新的SpringCloud發布版本就是 Hoxton.SR1

二. 子項目版本的映射管理

Spring Cloud項目通過 spring-cloud-dependencies 子項目的pom文件來管理不同的SpringCloud發布版本下的各個SpringCloud子項目的版本。以下是某個版本的spring-cloud-dependencies項目的pom文件的部分內容:

<dependencies>
            <!-- bom dependencies at the bottom so they can be overridden above -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-commons-dependencies</artifactId>
                <version>${spring-cloud-commons.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-dependencies</artifactId>
                <version>${spring-cloud-netflix.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-stream-dependencies</artifactId>
                <version>${spring-cloud-stream.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            ............

可以看到在pom文件中引入了許多spring-cloud-xxx-dependencies這樣的管理子項目的依賴的項目,我們隨便打開其中一個,例如 spring-cloud-netflix-dependencies的pom文件的片斷來看下:

<properties>
        <archaius.version>0.7.6</archaius.version>
        <concurrency-limits.version>0.1.6</concurrency-limits.version>
        <eureka.version>1.9.8</eureka.version>
        <hystrix.version>1.5.18</hystrix.version>
        <ribbon.version>2.3.0</ribbon.version>
        <servo.version>0.12.21</servo.version>
        <zuul.version>1.3.1</zuul.version>
        <rxjava.version>1.2.0</rxjava.version>
        <rxjava-reactive-streams.version>1.2.1</rxjava-reactive-streams.version>
        <turbine.version>1.0.0</turbine.version>
        <eureka-jersey.version>1.19.1</eureka-jersey.version>
        <xstream.version>1.4.10</xstream.version>
        <okhttp3.version>3.8.1</okhttp3.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-eureka-client</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-archaius</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
                <version>${project.version}</version>
            </dependency>

可以看到里面出現了各個子項目真正依賴的一些具體jar的版本。 當然這些jar都是以可選列表的方式提供出來的,也就是通過<dependencyManagement/>提供出來的。並不會真正被項目引入。下面通過一個具體的springCloud注冊中心的案例來看下,在具體項目pom文件中如何使用,有兩種方式:

不繼承父項目的方式

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

繼承父項目的方式

<parent> 
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-parent</artifactId>
        <version>${spring-cloud.version}</version>
    </parent>
  <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

   

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

 

總結一下,分三個步驟:

1. 在 <properties/>中定義springCloud的版本常量

2. 以bom機制引入spring-cloud-dependencies,其版本由步驟1指定

3. 在 <dependencies>依賴列表中引入具體要用到的springCloud的組件依賴,即子項目,此時無需關注版本了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM