SpringBoot?2.x和3.x的核心區(qū)別詳解(這些變化你必須知道)
前言
大家好,我是大華!有很多朋友不知道Springboot2.x和3.x有什么區(qū)別,用著感覺都差不多。其實3.x是一個重大版本升級。
為什么 Spring Boot 3.x 這么重要?
因為它不僅僅是加了幾個新功能,而是整個技術地基都變了。
下面我們舉幾個例子來了解一下。
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 等技術,幾乎每個 Java 文件都要改。
- 建議使用 IDE 的全局替換功能,但要小心第三方庫是否支持。
2. 安全配置
Spring Boot 3.x 默認使用 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 應用編譯成原生可執(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、微服務、邊緣計算等資源敏感場景。
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→ 檢查應用是否“活著”(是否崩潰)GET /actuator/health/readiness→ 檢查應用是否“就緒”(是否可以接收流量)
K8s 可以用這兩個接口做更精準的健康檢查,避免誤殺或誤導流。
那我現(xiàn)在該升級嗎?
看情況!分兩種:
推薦升級的情況:
- 新項目:直接上 Spring Boot 3.x + Java 17!
- 想玩原生鏡像:追求極致性能和啟動速度。
- 云原生項目:用 K8s、微服務架構(gòu)。
暫緩升級的情況:
- 還在用 Java 8:必須先升級 JDK。
- 依賴老舊庫:比如某些中間件 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)之路。
早點了解,早點準備,別等到公司要求升級時,你還在問“javax和jakarta有啥區(qū)別?”
另外SpringBoot4.x很快就發(fā)布正式版了,可以關注一下。
到此這篇關于SpringBoot 2.x和3.x核心區(qū)別的文章就介紹到這了,更多相關SpringBoot2.x和3.x核心區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于springboot?配置文件context-path的坑
這篇文章主要介紹了基于springboot?配置文件context-path的坑,基于很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringBoot Security前后端分離登錄驗證的實現(xiàn)
這篇文章主要介紹了SpringBoot Security前后端分離登錄驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
elasticsearch源碼分析index?action實現(xiàn)方式
這篇文章主要為大家介紹了elasticsearch源碼分析index?action實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
spring security在分布式項目下的配置方法(案例詳解)
這篇文章主要介紹了spring security在分布式項目下的配置方法,本文通過一個項目案例給大家詳細介紹,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
簡單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別
這篇文章主要介紹了簡單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
Java?Bean轉(zhuǎn)Map的那些踩坑實戰(zhàn)
項目中有時會遇到Map轉(zhuǎn)Bean,Bean轉(zhuǎn)Map的情況,下面這篇文章主要給大家介紹了關于Java?Bean轉(zhuǎn)Map那些踩坑的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07

