SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)
將 Spring Boot 從 2.7.x 升級(jí)到 3.3 是一個(gè)重要的遷移過程,特別是因?yàn)?Spring Boot 3.x 系列基于 Jakarta EE 9,而不再使用 Java EE。此版本升級(jí)伴隨著許多重大變化,以下是你在升級(jí)過程中需要注意的關(guān)鍵事項(xiàng):
1. JDK 版本升級(jí)
- 要求:Spring Boot 3.x 最低要求 JDK 17。如果你當(dāng)前項(xiàng)目還在使用 JDK 8 或 JDK 11,首先需要升級(jí)到 JDK 17 或更高版本。
- 建議:在升級(jí) Spring Boot 之前,先確保項(xiàng)目能夠在 JDK 17 上正常運(yùn)行。
2. Jakarta EE 遷移
- 變化:Spring Boot 3.x 轉(zhuǎn)換到 Jakarta EE 9,所有 Java EE 包名從
javax.*
更改為jakarta.*
。- 例如:
javax.servlet
變成了jakarta.servlet
。
- 例如:
- 解決方法:檢查代碼中是否直接依賴了
javax.*
包,如果有的話,必須修改為jakarta.*
。許多第三方庫和框架(如 Hibernate、Tomcat、Jetty 等)也需要更新到兼容 Jakarta EE 版本。
3. Spring Framework 6 升級(jí)
- Spring Boot 3.x 是基于 Spring Framework 6 構(gòu)建的,升級(jí)到 Spring Framework 6 會(huì)帶來以下改動(dòng):
- 移除的 API:一些已經(jīng)廢棄的 API 將被徹底移除。
- 不再支持的框架:對(duì)一些老舊技術(shù)和庫的支持被移除,如 JUnit 4、CGLIB、Rhino 等。
- Reactive Changes:Spring WebFlux 的一些 API 已做調(diào)整。
- 解決方法:根據(jù)官方遷移指南,調(diào)整代碼中使用到的 Spring API。
4. 依賴庫的兼容性
- 第三方庫升級(jí):確保你項(xiàng)目中使用的所有第三方庫都兼容 Spring Boot 3.x 和 Jakarta EE 9。如果你使用的庫沒有更新到支持
jakarta.*
包,可能需要找到替代方案或等待庫更新。 - 建議:升級(jí)前使用
mvn dependency:tree
或./gradlew dependencies
來檢查所有依賴項(xiàng),并確認(rèn)其兼容性。
5. Spring Security
- Spring Security 6:Spring Boot 3.x 使用 Spring Security 6,帶來了諸多變化,尤其是在 OAuth2 和 JWT 的處理上有新的 API 改動(dòng)。
- 變化示例:
- 許多配置類和方法已經(jīng)廢棄或被重構(gòu),比如
WebSecurityConfigurerAdapter
已被棄用,推薦使用SecurityFilterChain
來配置安全規(guī)則。 @EnableWebSecurity
需要與SecurityConfigurerAdapter
一起配置,而不再是繼承WebSecurityConfigurerAdapter
。
- 許多配置類和方法已經(jīng)廢棄或被重構(gòu),比如
6. Hibernate 和 JPA
- Jakarta Persistence API:Spring Boot 3.x 使用的 Hibernate 版本已經(jīng)遷移到 Jakarta Persistence API (
jakarta.persistence
),這意味著你需要檢查項(xiàng)目中所有 JPA 實(shí)體類的導(dǎo)入聲明,確保它們指向正確的 Jakarta 包。 - 建議:使用自動(dòng)化工具如
jdeps
或jdeprscan
來檢查代碼中的依賴并進(jìn)行遷移。
7. 日志框架
- Log4j 2.x 或 Logback 更新:Spring Boot 3.x 默認(rèn)使用較新的日志庫版本,確保項(xiàng)目中的日志框架已經(jīng)升級(jí)到最新的穩(wěn)定版本以防止兼容性問題。
- 日志配置:檢查
log4j2.xml
或logback-spring.xml
中的配置項(xiàng)是否需要更新,尤其是涉及jakarta.*
包的。
8. Spring Cloud 和其他生態(tài)系統(tǒng)
- Spring Cloud 兼容性:如果你使用了 Spring Cloud,確保 Spring Cloud 版本與 Spring Boot 3.x 兼容。通常 Spring Cloud 會(huì)發(fā)布兼容特定 Spring Boot 版本的版本。
- 例如:Spring Cloud 2022.0.x 系列版本兼容 Spring Boot 3.x。
9. 廢棄和移除的 API
- 廢棄 API 清單:在 Spring Boot 2.7.x 中,某些 API 可能已經(jīng)標(biāo)記為廢棄,Spring Boot 3.x 可能會(huì)徹底移除這些 API。因此在升級(jí)前,建議先解決所有廢棄 API 的警告。
- 工具:使用
jdeps
或jdeprscan
工具檢查是否使用了廢棄的 API。
10. 配置文件的變更
- application.properties / application.yml:一些配置屬性可能在 Spring Boot 3.x 中發(fā)生了變更或重命名,需要檢查你的配置文件。
- 解決方法:參考 Spring Boot 官方發(fā)布的配置屬性遷移指南,確保配置項(xiàng)正確遷移。
11. 測(cè)試框架
- JUnit 5:Spring Boot 3.x 強(qiáng)制要求使用 JUnit 5。如果你項(xiàng)目中仍在使用 JUnit 4,需要遷移到 JUnit 5。JUnit 5 提供了更現(xiàn)代化的 API 和特性,如
@ExtendWith
、@TestFactory
、@Nested
等。 - Mock 和 Stub 庫:升級(jí)時(shí)也要注意測(cè)試框架如 Mockito、WireMock 等的兼容性。
示例:升級(jí)過程的步驟
1. 升級(jí) Java 版本
- 修改
pom.xml
中的maven.compiler.source
和maven.compiler.target
為 17,或者修改build.gradle
中的sourceCompatibility
和targetCompatibility
為 17。 - 確保在 JDK 17 環(huán)境下編譯和運(yùn)行項(xiàng)目。
2. 升級(jí) Spring Boot 版本
在 pom.xml
中將 Spring Boot 版本升級(jí)為 3.3.x:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.x</version> <relativePath/> <!-- lookup parent from repository --> </parent>
或者在 build.gradle
中:
implementation 'org.springframework.boot:spring-boot-starter:3.3.x'
3. 遷移依賴庫
- 使用
mvn dependency:tree
或./gradlew dependencies
查看依賴樹,確保所有依賴都兼容jakarta.*
包名。 - 手動(dòng)調(diào)整代碼中對(duì)
javax.*
的引用,改為jakarta.*
。
4. 運(yùn)行和測(cè)試
- 運(yùn)行項(xiàng)目,修復(fù)編譯和運(yùn)行時(shí)問題。
- 運(yùn)行單元測(cè)試和集成測(cè)試,確保所有測(cè)試通過,且升級(jí)不會(huì)破壞功能。
額外工具
jdeps
:用于檢測(cè)是否使用了已被移除的 JDK 內(nèi)部 API。jdeprscan
:掃描項(xiàng)目是否使用了已廢棄的 API,可以結(jié)合--release 17
參數(shù)來檢查與 JDK 17 的兼容性。
總結(jié)
從 Spring Boot 2.7.x 升級(jí)到 3.3 是一個(gè)涉及較多變動(dòng)的過程,特別是遷移到 Jakarta EE 和 JDK 17。你需要確保:
- 項(xiàng)目在 JDK 17 上正常運(yùn)行。
- 所有
javax.*
包改為jakarta.*
。 - 更新 Spring 依賴和第三方庫以支持 Jakarta EE 9。
- 仔細(xì)檢查配置文件和日志,處理廢棄 API。
到此這篇關(guān)于SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)的文章就介紹到這了,更多相關(guān)SpringBoot從2.7.x 升級(jí)到3.3內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)
這篇文章主要介紹了基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03java使用JNA(Java Native Access)調(diào)用dll的方法
java使用JNA(Java Native Access)調(diào)用windows系統(tǒng)的dll文件的例子2013-11-11Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯實(shí)例詳解
這篇文章主要介紹了Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯,結(jié)合實(shí)例形式詳細(xì)分析了Spring Boot 2自定義啟動(dòng)運(yùn)行邏輯詳細(xì)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05SpringMVC框架實(shí)現(xiàn)上傳圖片的示例代碼
本篇文章主要介紹了SpringMVC框架實(shí)現(xiàn)上傳圖片的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09深入理解Java中的HashMap的實(shí)現(xiàn)機(jī)制
這篇文章主要介紹了深入理解Java中的HashMap的實(shí)現(xiàn)機(jī)制,同時(shí)也有助于理解Java中對(duì)于哈希函數(shù)的相關(guān)處理方式,需要的朋友可以參考下2015-07-07