欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot2.x的依賴管理配置

 更新時間:2020年06月29日 10:34:57   作者:Throwable  
這篇文章主要介紹了SpringBoot2.x的依賴管理配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前提

這篇文章是《SpringBoot2.x入門》專輯的第1篇文章,使用的SpringBoot版本為2.3.1.RELEASE,JDK版本為1.8

主要梳理一下SpringBoot2.x的依賴關(guān)系和依賴的版本管理,依賴版本管理是開發(fā)和管理一個SpringBoot項目的前提。

SpringBoot其實是通過starter的形式,對spring-framework進行裝箱,消除了(但是兼容和保留)原來的XML配置,目的是更加便捷地集成其他框架,打造一個完整高效的開發(fā)生態(tài)。

SpringBoot依賴關(guān)系

因為個人不太喜歡Gradle,所以下文都以Maven舉例。

和SpringCloud的版本(SpringCloud的正式版是用倫敦地鐵站或者說倫敦某地名的英文名稱作為版本號,例如比較常用的F版本Finchley就是位于倫敦北部芬奇利)管理不同,SpringBoot的依賴組件發(fā)布版本格式是:X.Y.Z.RELEASE。因為SpringBoot組件一般會裝箱為starter,所以組件的依賴GAV一般為:org.springframework.boot:spring-boot-starter-${組件名}:X.Y.Z.RELEASE,其中X是主版本,不同的主版本意味著可以放棄兼容性,也就是SpringBoot1.x和SpringBoot2.x并不保證兼容性,而組件名一般是代表一類中間件或者一類功能,如data-redis(spring-boot-starter-data-redis,提供Redis訪問功能)、jdbc(spring-boot-starter-jdbc,提供基于JDBC驅(qū)動訪問數(shù)據(jù)庫功能)等等。以SpringBoot當(dāng)前最新的發(fā)布版本2.3.1.RELEASE的org.springframework.boot:spring-boot-starter:jar:2.3.1.RELEASE為例,用mvn dependency:tree分析它的依賴關(guān)系如下:

這個依賴樹也印證了starter是基于Spring項目裝箱和擴展的。

SpringBoot依賴管理

如果使用Spring Initializr創(chuàng)建一個SpringBoot項目的話,那么會發(fā)現(xiàn)項目的POM文件中會加入了一個parent元素:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.1.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
</parent>

其實spring-boot-starter-parent相當(dāng)于作為了當(dāng)前項目的父模塊,在父模塊里面管理了當(dāng)前指定的SpringBoot版本2.3.1.RELEASE所有依賴的第三方庫的統(tǒng)一版本管理,通過spring-boot-starter-parent上溯到最頂層的項目,會找到一個properties元素,里面統(tǒng)一管理Spring框架和所有依賴到的第三方組件的統(tǒng)一版本號,這樣就能確保對于一個確定的SpringBoot版本,它引入的其他starter不再需要指定版本,同時所有的第三方依賴的版本也是固定的。如項目的POM文件如下:

<!-- 暫時省略其他的配置屬性 -->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.1.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
      <exclusion>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>

這樣只需要修改parent元素中的版本號,就能全局更變所有starter的版本號。這種做法其實本質(zhì)上是把當(dāng)前項目作為spring-boot-starter-parent的子項目,其實在一定程度上并不靈活。這里推薦使用另一種方式:通過dependencyManagement元素全局管理SpringBoot版本,適用于單模塊或者多模塊的Maven項目。項目的(父)POM文件如下:

<!-- spring-boot-guide 父POM -->
<properties>
  <spring.boot.version>2.3.1.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring.boot.version}</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>

然后需要用到其他starter的時候,只需要在dependencies直接引入即可,不再需要指定版本號,版本號由dependencyManagement中定義的版本號統(tǒng)一管理。

<!-- spring-boot-guide/ch0-dependency 子POM -->
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
</dependencies>

SpringBoot依賴覆蓋

有些特殊的情況,可能項目中大部分的starter使用的是相對低的版本,但是由于部分新的功能需要使用到更高版本的個別starter,則需要強制引入該高版本的starter。這里舉一個例子,項目用到的SpringBoot組件的版本是2.1.5.RELEASE,使用的中間件服務(wù)Elasticsearch的版本是7.x,而spring-boot-starter-data-elasticsearch支持的版本如下:

理論上可以一下子升級SpringBoot2.3.1.RELEASE,其實也可以直接指定spring-boot-starter-data-elasticsearch的版本覆蓋掉全局的SpringBoot組件版本,這里應(yīng)用了Maven的依賴調(diào)解原則:

<!-- 父POM或者全局POM -->
<properties>
  <spring.boot.version>2.1.5.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring.boot.version}</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.3.1.RELEASE</version>
  </dependency>
</dependencies>

這樣就能單獨提升spring-boot-starter-data-elasticsearch的版本為2.3.1.RELEASE,其他組件的版本依然保持為2.1.5.RELEASE。

小結(jié)

目前有兩種常用的方式管理SpringBoot組件的版本(兩種方式二選一):

  • 配置parent元素,通過項目繼承的方式指定SpringBoot組件的版本號,這是Spring Initializr生成的項目中默認的配置方式。
  • 配置dependencyManagement元素(推薦此方式),通過(父)POM文件統(tǒng)一指定SpringBoot組件的版本號。

另外,SpringBoot1.x2.x之間有兼容性問題(最明顯的一點是2.x中刪除了1.x中大量的內(nèi)建類,如果用到了這些SpringBoot中的內(nèi)建類,容易出現(xiàn)ClassNotFoundException),降級或者升級都有比較大的風(fēng)險。一般情況下,建議使用同一個大版本進行項目開發(fā),如果確定需要進行大版本切換,請務(wù)必做完畢的功能測試。

到此這篇關(guān)于SpringBoot2.x的依賴管理配置的文章就介紹到這了,更多相關(guān)SpringBoot2.x 依賴管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

作者: throwable

出處:https://www.cnblogs.com/throwable/p/13206029.html

相關(guān)文章

  • Java構(gòu)造代碼塊,靜態(tài)代碼塊原理與用法實例分析

    Java構(gòu)造代碼塊,靜態(tài)代碼塊原理與用法實例分析

    這篇文章主要介紹了Java構(gòu)造代碼塊,靜態(tài)代碼塊,結(jié)合實例形式分析了Java構(gòu)造代碼塊,靜態(tài)代碼塊的功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • maven配置阿里云倉庫的實現(xiàn)方法

    maven配置阿里云倉庫的實現(xiàn)方法

    本文主要介紹了maven配置阿里云倉庫的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Spring bean為什么默認是單例

    Spring bean為什么默認是單例

    這篇文章主要介紹了Spring bean為什么默認是單例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Java實現(xiàn)數(shù)獨小游戲

    Java實現(xiàn)數(shù)獨小游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)數(shù)獨小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • SpringBoot后端數(shù)據(jù)校驗實戰(zhàn)操作指南

    SpringBoot后端數(shù)據(jù)校驗實戰(zhàn)操作指南

    在項?開發(fā)中,對于前端提交的表單,后臺接?接收到表單數(shù)據(jù)后,為了保證程序的嚴(yán)謹性,通常后端會加?業(yè)務(wù)參數(shù)的合法校驗操作來避免程序的?技術(shù)性?bug,這篇文章主要給大家介紹了關(guān)于SpringBoot后端數(shù)據(jù)校驗的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • java之Timer和TimerTask簡單demo(分享)

    java之Timer和TimerTask簡單demo(分享)

    下面小編就為大家?guī)硪黄猨ava之Timer和TimerTask簡單demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java利用EasyExcel實現(xiàn)導(dǎo)出導(dǎo)入功能的示例代碼

    Java利用EasyExcel實現(xiàn)導(dǎo)出導(dǎo)入功能的示例代碼

    EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。本文廢話不多說,直接上手試試,用代碼試試EasyExcel是否真的那么好用
    2022-11-11
  • 徹底搞懂Java多線程(四)

    徹底搞懂Java多線程(四)

    這篇文章主要給大家介紹了關(guān)于Java面試題之多線程和高并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • java如何用正則表達式匹配與提取字符串

    java如何用正則表達式匹配與提取字符串

    一位以前的同事在群里面突然發(fā)了個需求,要通過正則表達式來取值,下面這篇文章主要給大家介紹了關(guān)于java如何用正則表達式匹配與提取字符串的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • java property配置文件管理工具框架過程詳解

    java property配置文件管理工具框架過程詳解

    這篇文章主要介紹了java property配置文件管理工具框架過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論