從 Spring Boot 2 升級到 Spring Boot 3 的終極指南

一、升級前的核心準備

1. JDK 版本升級

Spring Boot 3 強制要求 Java 17 及以上版本。若當前項目使用 Java 8 或 11,需按以下步驟操作:

  • 安裝 JDK 17:從 Oracle 或 OpenJDK 官網下載,配置環境變量(如 JAVA_HOME)。
  • IDE 設置:在 IntelliJ IDEA 或 Eclipse 中修改項目 JDK 版本(示例):
    <!-- Maven 配置示例 -->
    <properties><java.version>17</java.version>
    </properties>
    

2. 依賴版本檢查

Spring Boot 3 基于 Spring Framework 6 和 Jakarta EE 10,需確保所有依賴兼容:

  • Spring Cloud:建議升級至 2023.0.x 版本。
  • 數據庫驅動:如 MyBatis 需升級到 3.0.3+,Hibernate 到 6.1.4+。
  • 第三方庫:檢查 Redis、ShardingSphere 等是否支持 Spring Boot 3(如 ShardingSphere 5.4.1+)。

二、代碼遷移的核心步驟

1. Spring Boot 版本升級

修改 pom.xmlbuild.gradle

<!-- Maven 示例 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version>  <!-- 最新穩定版 -->
</parent>

2. Jakarta EE 包名替換

所有 javax.* 包需替換為 jakarta.*,例如:

// 修改前
import javax.servlet.http.HttpServletRequest;
// 修改后
import jakarta.servlet.http.HttpServletRequest;

操作技巧:使用 IDE 的全局替換功能(如 IntelliJ 的 Ctrl+Shift+R)批量修改。

3. 配置屬性遷移

Spring Boot 3 中部分配置項已變更:

  • Redis 配置spring.redisspring.data.redis
  • 日志格式:默認日期格式改為 ISO-8601,可通過以下配置恢復舊格式:
    logging:pattern:dateformat: "yyyy-MM-dd HH:mm:ss.SSS"
    

輔助工具:添加 spring-boot-properties-migrator 生成遷移報告:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-properties-migrator</artifactId><scope>runtime</scope>
</dependency>

4. 注解與 API 調整

  • @ConstructorBinding:不再需要類級別的注解,僅用于多構造函數的場景。
  • URL 匹配規則:默認關閉尾部斜杠匹配,需手動啟用:
    @Configuration
    public class WebConfig implements WebMvcConfigurer {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {configurer.setUseTrailingSlashMatch(true);  // 啟用斜杠匹配}
    }
    

三、關鍵問題與解決方案

1. 依賴沖突

場景:啟動時拋出 ClassNotFoundExceptionNoSuchMethodError
解決

  • 檢查依賴樹:使用 mvn dependency:tree 分析沖突。
  • 排除舊版本依賴(示例):
    <dependency><groupId>com.example</groupId><artifactId>old-library</artifactId><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion></exclusions>
    </dependency>
    

2. 安全配置變更

Spring Security 6 中 SecurityContext 需顯式保存:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated()).securityContext(securityContext -> securityContext.securityContextRepository(new HttpSessionSecurityContextRepository())  // 啟用 Session 存儲);return http.build();
}

3. 響應式編程兼容性

若使用 WebFlux,需注意:

  • 響應頭大小限制:Tomcat 需自定義配置:
    @Configuration
    public class ServerConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {@Overridepublic void customize(TomcatServletWebServerFactory factory) {factory.addConnectorCustomizers(connector -> connector.setProperty("maxHttpResponseHeaderSize", "100000"));}
    }
    

四、升級后的驗證與優化

1. 測試策略

  • 單元測試:確保所有 @SpringBootTest 測試通過。
  • 集成測試:使用 Testcontainers 驗證數據庫、Redis 等外部服務。
  • 性能測試:通過 JMeter 對比啟動時間和內存占用(Spring Boot 3 啟動速度提升約 20%)。

2. 監控與日志

  • Actuator 配置:啟用健康檢查與指標監控:
    management:endpoints:web:exposure:include: health,metrics
    
  • 日志聚合:集成 ELK 或 Prometheus + Grafana。

五、總結與建議

升級到 Spring Boot 3 不僅是版本迭代,更是技術棧的全面革新。通過本文的步驟,開發者可系統性解決包名替換、配置遷移、依賴沖突等核心問題。建議在升級前充分備份代碼,并參考官方遷移指南。最終,你將獲得更快的啟動速度、更好的虛擬線程支持,以及 Jakarta EE 10 的現代化特性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71964.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Buildroot 添加自定義模塊-內置文件到文件系統

目錄 概述實現步驟1. 創建包目錄和文件結構2. 配置 Config.in3. 定義 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置與編譯 概述 Buildroot 是一個高度可定制和模塊化的嵌入式 Linux 構建系統&#xff0c;適用于從簡單到復雜的各種嵌入式項目. buildroot的源碼中bui…

物聯網通信應用案例之《智慧農業》

案例概述 在智慧農業方面&#xff0c;一般的應用場景為可以自動檢測溫度濕度等一系列環境情況并且可以自動做出相應的處理措施如簡單的澆水和溫度控制等&#xff0c;且數據情況可遠程查看&#xff0c;以及用戶可以實現遠程控制。 基本實現原理 傳感器通過串口將數據傳遞到Wi…

設計模式| 觀察者模式 Observer Pattern詳解

目錄 一、概述1.1 動機1.2 核心思想1.3 別名 二、角色與實現原理2.1 角色2.2 實現原理2.3 類圖 三、經典接口實現3.1 示例3.1.1 觀察者接口3.1.2 目標接口3.1.3 具體被觀察者3.1.4 具體觀察者3.1.5 Client3.1.6 UML時序圖 3.2 特點 四、其他實現方式4.1 委托與事件&#xff08;…

kotlin 知識點一 變量和函數

在Kotlin中定義變量的方式和Java 區別很大&#xff0c;在Java 中如果想要定義一個變 量&#xff0c;需要在變量前面聲明這個變量的類型&#xff0c;比如說int a表示a是一個整型變量&#xff0c;String b表 示b是一個字符串變量。而Kotlin中定義一個變量&#xff0c;只允許在變量…

基于數據可視化學習的卡路里消耗預測分析

數據分析實操集合&#xff1a; 1、關于房間傳感器監測數據集的探索 2、EEMD-LSTM模型擇時策略 — 1.EEMD分解與LSTM模型搭建 3、EEMD-LSTM模型擇時策略 — 2. 量化回測 4、國際超市電商銷售數據分析 5、基于問卷調查數據的多元統計數據分析與預測&#xff08;因子分析、對應分…

記錄Liunx安裝Jenkins時的Package ‘jenkins‘ has no installation candidate

1、確保是否安裝了Java&#xff0c;如果沒有&#xff0c;可通過以下命令進行安裝&#xff1a; sudo apt update sudo apt install openjdk-21-jre2、安裝Jenkins sudo apt update sudo apt install jenkins執行sudo apt install jenkins時&#xff0c;可能會出現 意思是&…

kiln微調大模型-使用deepseek R1去訓練一個你的具備推理能力的chatGPT 4o

前言 隨著deepseek的爆火&#xff0c;對于LLM的各種內容也逐漸步入我的視野&#xff0c;我個人認為&#xff0c;可能未來很長一段時間&#xff0c;AI將持續爆火&#xff0c;進入一段時間的井噴期&#xff0c;AI也會慢慢的走入我們每個家庭之中&#xff0c;為我們的生活提供便利…

用AI玩游戲1——狼人殺六人局

狼人殺六人局1 狼人殺六人局1&#xff0c;好人陣營有兩個平民&#xff0c;一個預言家&#xff0c;一個守衛&#xff0c;壞人陣營有兩個狼人。狼人每晚可以選擇殺死一個人但第一天晚上不能殺人&#xff0c;狼人晚上可以睜眼識別到同伴和其他好人玩家但不知道他們的身份。預言家…

sqli-labs

Less-8 單引號報錯&#xff0c;雙引號顯示正常 又是You are in......看來還是用盲注 布爾盲注&#xff1a; 如下語句是用來判斷當前數據庫名的第一個字母是不是s&#xff0c;后面的以此類推&#xff0c;比較復雜和麻煩 ?id1 and substr(database(),1,1)s -- 比如這個我們通…

自定義ToolbarView實戰指南(Kotlin版)

一、為什么我們需要造輪子&#xff1f; 看到標題你可能會問&#xff1a;系統自帶Toolbar不香嗎&#xff1f;確實香&#xff0c;但遇到這些場景就抓瞎了&#xff1a; 設計稿要求標題欄帶漸變背景動態波浪線產品經理非要搞個不對稱的返回按鈕布局UI設計師堅持標題和副標題要45度…

微軟推出Office免費版,限制諸多,只能編輯不能保存到本地

易采游戲網2月25日獨家消息&#xff1a;微軟宣布推出一款免費的Office版本&#xff0c;允許用戶進行基礎文檔編輯操作&#xff0c;但限制頗多&#xff0c;其中最引人關注的是用戶無法將文件保存到本地。這一舉措引發了廣泛討論&#xff0c;業界人士對其背后的商業策略和用戶體驗…

PyTorch-基礎(CUDA、Dataset、transforms、卷積神經網絡、VGG16)

PyTorch-基礎 環境準備 CUDA Toolkit安裝&#xff08;核顯跳過此步驟&#xff09; CUDA Toolkit是NVIDIA的開發工具&#xff0c;里面提供了各種工具、如編譯器、調試器和庫 首先通過NVIDIA控制面板查看本機顯卡驅動對應的CUDA版本&#xff0c;如何去下載對應版本的Toolkit工…

Vue2+Element實現Excel文件上傳下載預覽【超詳細圖解】

目錄 一、需求背景 二、落地實現 1.文件上傳 圖片示例 HTML代碼 業務代碼 2.文件下載 圖片示例 方式一&#xff1a;代碼 方式二&#xff1a;代碼 3.文件預覽 圖片示例 方式一&#xff1a;代碼 方式二&#xff1a;代碼 一、需求背景 在一個愉快的年后&#xff…

【Bug】natten:安裝報錯(臨近注意力機制的高效cuda內核實現)

正常安裝natten報錯 pip install natten 報錯 可以嘗試使用以下網站進行安裝 https://shi-labs.com/natten/ 可以根據自己的cuda與pytorch版本進行安裝 之間復制命令即可&#xff0c;不需要進行任何修改

win10把c盤docker虛擬硬盤映射遷移到別的磁盤

c盤空間本身就比較小、如果安裝了docker服務后&#xff0c;安裝的時候沒選擇其他硬盤&#xff0c;虛擬磁盤也在c盤會占用很大的空間&#xff0c;像我的就三十多個G&#xff0c;把它遷移到其他磁盤一下子節約幾十G 1、先輸入下面命令查看 docker 狀態 wsl -l -v 2、如果沒有停止…

動態內容加載的解決方案:Selenium與Playwright對比故障排查實錄

方案進程 2024-09-01 09:00 | 接到亞航航班數據采集需求 2024-09-01 11:30 | 首次嘗試使用Selenium遭遇Cloudflare驗證 2024-09-01 14:00 | 切換Playwright方案仍觸發反爬機制 2024-09-01 16:30 | 引入爬蟲代理IPUA輪換策略 2024-09-02 10:00 | 雙方案完整實現并通過壓力測試故…

MaxKB上架至阿里云輕量應用服務器鏡像市場

近日&#xff0c;MaxKB開源知識庫問答系統已上架至阿里云輕量應用服務器鏡像市場&#xff0c;目前是阿里云此類鏡像市場中唯一推薦的AI應用鏡像。 ▲圖1 MaxKB已經上架至阿里云輕量應用服務器鏡像市場 MaxKB是飛致云旗下開源項目&#xff0c;是一款基于大語言模型和RAG&…

藍橋杯 2013 省 B 翻硬幣

題目背景 小明正在玩一個“翻硬幣”的游戲。 題目描述 桌上放著排成一排的若干硬幣。我們用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小寫字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果同時翻轉左邊的兩個硬幣&…

分享---rpc運維事故處理

事故案例03 - Qserver RPC調用大量失敗 一、事故背景 Queryserver是內部的核心服務&#xff0c;負責處理數據查詢請求并支持分布式緩存功能。為優化緩存一致性&#xff0c;新增了分布式鎖邏輯&#xff1a;在查詢請求命中緩存時需先獲取分布式鎖&#xff08;基于Tair實現&…

string類詳解(下)

文章目錄 4. string類的模擬實現4.1 構造 析構4.2 c_str4.3 下標遍歷4.4 迭代器4.5 插入4.6 刪除4.7 查找4.8 賦值4.9 交換4.10 提取子串4.11 比較大小4.12 流插入 && 流提取 5. 現代版寫法的String類5.1 完整代碼 6. 寫時拷貝&#xff08;了解&#xff09; 4. string…