SpringBoot?2.x和3.x的核心區(qū)別詳解(這些變化你必須知道)
前言
大家好,我是大華!有很多朋友不知道Springboot2.x和3.x有什么區(qū)別,用著感覺都差不多。其實3.x是一個重大版本升級。
為什么 Spring Boot 3.x 這么重要?
因為它不僅僅是加了幾個新功能,而是整個技術(shù)地基都變了。
下面我們舉幾個例子來了解一下。
1. 包名的更新:javax→jakarta
這是2.x升級到3.x時,改動最大的地方。
Spring Boot 2.x(老代碼)
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.servlet.http.HttpServletRequest;
@Entity
public class User {
@Id
private Long id;
private String name;
// getter/setter
}
Spring Boot 3.x(新代碼)
import jakarta.persistence.Entity; // 注意:javax → jakarta
import jakarta.persistence.Id;
import jakarta.servlet.http.HttpServletRequest; // 同樣變了
@Entity
public class User {
@Id
private Long id;
private String name;
// getter/setter
}
劃重點:
- 所有
javax.*都要改成jakarta.*! - 如果你用的是 JPA、Servlet、Validation 等技術(shù),幾乎每個 Java 文件都要改。
- 建議使用 IDE 的全局替換功能,但要小心第三方庫是否支持。
2. 安全配置
Spring Boot 3.x 默認(rèn)使用 Spring Security 6,配置方式大變。
Spring Boot 2.x 配置方式
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
注意:WebSecurityConfigurerAdapter在Spring Security 6中已被廢棄!
Spring Boot 3.x 推薦方式(使用 Lambda DSL)
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll()
);
return http.build();
}
}
好處:
- 更函數(shù)式,代碼更清晰。
- 不用繼承,更靈活。
- 編譯時就能發(fā)現(xiàn)錯誤,而不是運行時報錯。
3. 原生鏡像(GraalVM)
Spring Boot 3.x 原生支持 GraalVM,可以把 Java 應(yīng)用編譯成原生可執(zhí)行文件。
如何啟用原生鏡像?
在 pom.xml 中加入插件:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
然后運行:
./mvnw -Pnative native:compile
編譯完成后,你會得到一個不依賴 JVM 的可執(zhí)行文件,比如 myapp。
運行它:
./myapp
你會發(fā)現(xiàn):
- 啟動時間:從 5 秒 → 0.1 秒
- 內(nèi)存占用:從 300MB → 50MB
特別適合:Serverless、微服務(wù)、邊緣計算等資源敏感場景。
4. 云原生支持:Liveness 和 Readiness
Spring Boot 3.x 的健康檢查更專業(yè),適合 Kubernetes。
配置application.yml
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: health,info,liveness,readiness
訪問新端點
GET /actuator/health/liveness→ 檢查應(yīng)用是否“活著”(是否崩潰)GET /actuator/health/readiness→ 檢查應(yīng)用是否“就緒”(是否可以接收流量)
K8s 可以用這兩個接口做更精準(zhǔn)的健康檢查,避免誤殺或誤導(dǎo)流。
那我現(xiàn)在該升級嗎?
看情況!分兩種:
推薦升級的情況:
- 新項目:直接上 Spring Boot 3.x + Java 17!
- 想玩原生鏡像:追求極致性能和啟動速度。
- 云原生項目:用 K8s、微服務(wù)架構(gòu)。
暫緩升級的情況:
- 還在用 Java 8:必須先升級 JDK。
- 依賴?yán)吓f庫:比如某些中間件 SDK 還不支持
jakarta。 - 項目穩(wěn)定,無大改動:可以等下次大版本迭代時再升級。
總結(jié)對比表
| 特性 | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| 最低 Java 版本 | Java 8 | Java 17 |
| 包名 | javax.* | jakarta.* |
| 原生鏡像 | 不支持 | 原生支持 |
| Spring Security | 繼承 WebSecurityConfigurerAdapter | 使用 DSL 配置 |
| 云原生支持 | /health | /liveness, /readiness |
| 未來支持 | 逐漸停止 | 主推版本 |
最后一句話
SpringBoot3.x不是可選項,而是Java 開發(fā)現(xiàn)代化的必經(jīng)之路。
早點了解,早點準(zhǔn)備,別等到公司要求升級時,你還在問“javax和jakarta有啥區(qū)別?”
另外SpringBoot4.x很快就發(fā)布正式版了,可以關(guān)注一下。
到此這篇關(guān)于SpringBoot 2.x和3.x核心區(qū)別的文章就介紹到這了,更多相關(guān)SpringBoot2.x和3.x核心區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你idea中創(chuàng)建一個javaweb(webapp)項目詳細(xì)圖文教程
這篇文章主要介紹了如何使用IntelliJ?IDEA創(chuàng)建一個Maven項目,并配置Tomcat服務(wù)器進(jìn)行運行,過程包括創(chuàng)建項目、配置運行環(huán)境、部署項目以及測試運行,需要的朋友可以參考下2025-01-01
詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用
這篇文章主要介紹了詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有實用價值,需要的朋友可以參考下2017-05-05
mybatis-plus配置控制臺打印完整帶參數(shù)SQL語句的實現(xiàn)
這篇文章主要介紹了mybatis-plus配置控制臺打印完整帶參數(shù)SQL語句,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Fluent Mybatis實現(xiàn)環(huán)境隔離和租戶隔離
我們在實際的業(yè)務(wù)開發(fā)中,經(jīng)常會碰到環(huán)境邏輯隔離和租戶數(shù)據(jù)邏輯隔離的問題。本文就詳細(xì)的來介紹一下,感興趣的小伙伴們可以參考一下2021-08-08
Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別
這篇文章主要介紹了Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別,文章介紹詳細(xì),具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
SpringBoot詳細(xì)探究講解默認(rèn)組件掃描
在項目中我們創(chuàng)建了Controller,這個Controller是如何被spring自動加載的呢?為什么Controller必須放在啟動類的同級目錄下呢2022-06-06
spring中12種@Transactional的失效場景(小結(jié))
日常我們進(jìn)行業(yè)務(wù)開發(fā)時,基本上使用的都是聲明式事務(wù),即為使用@Transactional注解的方式,本文主要介紹了spring中12種@Transactional的失效場景,感興趣的小伙伴們可以參考一下2022-01-01

