最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot項目升級2.2.x升至2.7.x的示例代碼

 更新時間:2023年09月19日 09:16:09   作者:Box_clf  
本文主要介紹了Springboot項目升級2.2.x升至2.7.x的示例代碼,會有很多的坑,具有一定的參考價值,感興趣的可以了解一下

依賴管理

spring-boot-starter-parent 升級為2.7.1

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
<!--        升級為2.7.x的版本-->
    <version>2.7.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

兼容老的配置文件格式,spring提供了專門的依賴進行兼容,但是建議還是在升級能成功運行之后進行配置的同步修改

<!--        升級2.7后支持yml環(huán)境變量名兼容-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>

如果使用了bootstrap.yml文件,升級之后默認是不會使用bootstrap.yml了,所以可能會導(dǎo)致啟動之后配置沒有生效,需要引入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.0.4</version>
</dependency>

配置修改

2.7.x不會處理循環(huán)依賴問題,需要手動配置修改application.yml添加配置 spring.main.allow-circular-references

如果有nacos的使用,版本替換為:

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.0.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.0.4.0</version>
</dependency>

同時需要支持yml配置,添加 spring.config.import

spring:
  profiles:
    active: "@profileActive@"
  application:
    name: saas
  cloud:
    nacos:
      server-addr: xx.xx.xx.xx:8848
      discovery:
        server-addr: xx.xx.xx.xx:8848
        namespace: f8f5c0c4-adc9-4c37-be6b-ddc
      config:
        server-addr: xx.xx.xx.xx:8848  #配置中心
        file-extension: yaml   #配置文件后綴名   dataId = application.name  +  file-extension
        namespace: f8f5c0c4-adc9-4c37-be6b-ddc
  config:
    import:
      - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} #配置中心

報錯問題定位思路

啟動報錯:

Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context.

最開始搜索報錯,很多網(wǎng)上說的一般都是忘記加注解 @SpringBootApplication ,或者沒有引入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

但是檢查并沒有遺漏。開始根據(jù)問題本身進行定位。

報錯本身就是沒有找到ServletWebServerFactory,那么思路就是檢查xxxxxxxConfiguration中的代碼是否正常執(zhí)行,這里就是 org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration

因為是Tomcat方式啟動所以只需要關(guān)心 tomcatServletWebServerFactory 方法

這里我設(shè)置了debug的方式但是并沒有走到這里

再次全局搜索懷疑可能是自動裝配的類 org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration 有問題

再次嘗試debug發(fā)現(xiàn)依然沒有走到,繼續(xù)思考查看類上方相關(guān)的Conditional注解條件是否滿足,猜測可能是 @ConditionalOnWebApplication(type = Type.SERVLET) 不滿足

點進注解查看

繼續(xù)查看對應(yīng)的 org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition ,搜索剛才的相關(guān)的 SERVLET ,繼續(xù)debug發(fā)現(xiàn)type為null直接返回了

繼續(xù)查找調(diào)用的地方進行debug發(fā)現(xiàn) autoConfigurationMetadata 傳入的就有問題,很多value都是空字符串

繼續(xù)定位到上級調(diào)用,發(fā)現(xiàn)傳入的數(shù)據(jù)依然和上面一樣存在問題

繼續(xù)跟蹤定位,終于調(diào)到了我們自己寫的代碼了

繼續(xù)查看上級調(diào)用,發(fā)現(xiàn)這個類是我們自己拷貝出來的Springboot內(nèi)部的類,做了一些自定義的改造

這里就說明,可能是從低版本的Springboot中拷貝出來的,但是升級到2.7.x之后可能存在對應(yīng)的邏輯變化,所以需要對比一下,大概是哪些代碼不一致

Ctrl+A全選Ctrl+C復(fù)制我們自己寫的代碼,然后跳進內(nèi)部的 AutoConfigurationImportSelector 再進行比較

這里發(fā)現(xiàn)我們自己的代碼少了一行

ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add);

根據(jù)斷言可以知道對應(yīng)的這段代碼不僅是讀取了 META-INF/spring.factories 中的自動裝配信息,還讀取了 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中的自動裝配的bean

最后查看了包結(jié)構(gòu),確實如此,升級后 META-INF/spring.factories 沒有了 ServletWebServerFactoryAutoConfiguration 而是放到了 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中。最后解決就是復(fù)制對應(yīng)的代碼到自定義的類中,支持 imports 中的自動裝配

到此這篇關(guān)于Springboot項目升級2.2.x升至2.7.x的示例代碼的文章就介紹到這了,更多相關(guān)Springboot 升級2.2.x升至2.7.x內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java web實現(xiàn)郵箱激活與忘記密碼

    java web實現(xiàn)郵箱激活與忘記密碼

    這篇文章主要為大家詳細介紹了java web實現(xiàn)郵箱激活與忘記密碼、重置密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java讀取DWG文件的完整步驟

    Java讀取DWG文件的完整步驟

    DWG 是 AutoCAD 的專有二進制格式,直接解析難度大,通過開源庫 Teigha File Converter(現(xiàn)更名 ODA File Converter)可實現(xiàn)格式轉(zhuǎn)換,間接讀取數(shù)據(jù),本文給大家介紹了Java讀取DWG文件的完整步驟,需要的朋友可以參考下
    2025-11-11
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單鏈表與雙向鏈表

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單鏈表與雙向鏈表

    這篇文章主要為大家詳細介紹了java實現(xiàn)單鏈表、雙向鏈表的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用profiles進行多環(huán)境配置的代碼實現(xiàn)

    使用profiles進行多環(huán)境配置的代碼實現(xiàn)

    在項目開發(fā)的過程中會用到多個環(huán)境,為了便于開發(fā)使用,通常需要使用profiles進行多環(huán)境配置,所以本文給大家介紹了使用profiles進行多環(huán)境配置的代碼實現(xiàn),需要的朋友可以參考下
    2024-02-02
  • Spring Boot集成Redis實戰(zhàn)操作功能

    Spring Boot集成Redis實戰(zhàn)操作功能

    這篇文章主要介紹了Spring Boot集成Redis實戰(zhàn)操作,包括如何集成redis以及redis的一些優(yōu)點,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Windows下將JAVA?jar注冊成windows服務(wù)的方法

    Windows下將JAVA?jar注冊成windows服務(wù)的方法

    這篇文章主要介紹了Windows下將JAVA?jar注冊成windows服務(wù)的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 利用SpringBoot與WebSocket實現(xiàn)實時雙向通信功能

    利用SpringBoot與WebSocket實現(xiàn)實時雙向通信功能

    隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,實時通信技術(shù)已經(jīng)逐漸成為現(xiàn)代Web應(yīng)用的核心需求,論是在即時消息系統(tǒng)還是物聯(lián)網(wǎng)(IoT)應(yīng)用中,WebSocket都提供了一種高效、持久的雙向通信方式,本文將深入解析如何利用Spring Boot實現(xiàn)WebSocket通信,需要的朋友可以參考下
    2025-07-07
  • 從基礎(chǔ)到實戰(zhàn)詳解SpringBoot3實現(xiàn)分頁操作的完整指南

    從基礎(chǔ)到實戰(zhàn)詳解SpringBoot3實現(xiàn)分頁操作的完整指南

    在當(dāng)今的互聯(lián)網(wǎng)軟件開發(fā)領(lǐng)域,處理海量數(shù)據(jù)是一個繞不開的話題,這篇文章jiang深入探討在 Spring Boot3 中如何巧妙實現(xiàn)分頁操作,下面我們就來詳細介紹一下吧
    2025-12-12
  • Java初學(xué)者必會的Map集合及其原理

    Java初學(xué)者必會的Map集合及其原理

    這篇文章主要給大家介紹Map集合及其原理,該集合中的信息是key-value形式,Map集合與Collection集合又有什么不同呢,要想搞清楚以上問題,下面跟著小編一起來看看吧
    2023-06-06
  • Java實現(xiàn)簡單臺球游戲

    Java實現(xiàn)簡單臺球游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單臺球游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

梁山县| 中卫市| 南澳县| 驻马店市| 清涧县| 武邑县| 阜城县| 阿瓦提县| 伊金霍洛旗| 和静县| 安化县| 新乡市| 永清县| 鲁甸县| 西充县| 丰城市| 清水河县| 太谷县| 莎车县| 禹州市| 扶沟县| 奈曼旗| 合肥市| 巍山| 苍山县| 西藏| 武穴市| 若羌县| 无为县| 青川县| 山阴县| 井冈山市| 东乡族自治县| 霍城县| 沈阳市| 延津县| 罗平县| 伊春市| 诸城市| 剑川县| 葫芦岛市|