驚!Spring Boot 4 將棄用 Undertow,Tomcat 要笑了?
前幾天,Spring Boot 發(fā)布了 4.0.0 M2 里程碑版本,引發(fā)了不少社區(qū)討論。對(duì)于開發(fā)者來說,這不僅僅是一次版本更新,而是一次“生態(tài)方向”的重大調(diào)整。尤其是 Undertow 被移除 這一決定,讓不少已經(jīng)在生產(chǎn)環(huán)境中使用 Undertow 的團(tuán)隊(duì)瞬間警覺。
很多企業(yè)此前選擇 替換內(nèi)嵌 Tomcat 為 Undertow,原因在于 Undertow 的 低內(nèi)存占用、天然持久連接支持、以及 高并發(fā)吞吐量更優(yōu) 等特點(diǎn)。然而,這次 Spring Boot 直接宣布 4.0 不再支持 Undertow,一時(shí)間讓開發(fā)者們感到有點(diǎn)“猝不及防”。
說到底,這背后并不是 Spring 團(tuán)隊(duì)的武斷,而是 Undertow 自身未跟進(jìn) Servlet 6.1 的規(guī)范,加上 Red Hat 的投入有限,導(dǎo)致 Spring Boot 無法繼續(xù)維護(hù)兼容層。換句話說,如果未來 Undertow 能夠更新到支持 Servlet 6.1,那么 Spring Boot 仍有可能恢復(fù)支持。
本文將帶你梳理 Spring Boot 4 的主要變更、移除特性、新功能亮點(diǎn),以及依賴升級(jí),讓你對(duì)未來的遷移與升級(jí)心中有數(shù)。
重要變更與移除
- 移除 Undertow 支持
 
- Spring Boot 4.0 基于 Servlet 6.1,但 Undertow 目前未適配該規(guī)范,因此官方徹底移除了 Undertow 的內(nèi)嵌支持。
 - 這意味著未來 Spring Boot 項(xiàng)目默認(rèn)仍將以內(nèi)嵌 Tomcat 或 Jetty 作為主要選擇。
 
- Actuator 注解變更
 
javax.annotations.NonNull與org.springframework.lang.Nullable不再適用于 Actuator 端點(diǎn)參數(shù)。- 推薦替換為:
OptionalParameter或org.jspecify.annotations.Nullable。 
- Elasticsearch 客戶端更新
 
- 舊的 RestClient 自動(dòng)配置已棄用,替換為 Rest5Client。
 - 對(duì)應(yīng)的 
RestClientBuilderCustomizer也需要更換為Rest5ClientBuilderCustomizer。 
- Kafka Streams 調(diào)整
 
- Spring Boot 移除了 
StreamBuilderFactoryBeanCustomizer,改為依賴 Spring Kafka 的StreamsBuilderFactoryBeanConfigurer。 
- 構(gòu)建工具最低要求
 
- Gradle 需升級(jí)至 
8.14+或直接使用 9.x。 
新功能與亮點(diǎn)
- Gradle 9 支持
 
- Spring Boot 4 原生支持 Gradle 9,同時(shí)兼容 Gradle 8.14 及以上版本。
 
- OpenTelemetry Starter
示例配置路徑: 
src/main/resources/application.yml- 新增 
spring-boot-starter-opentelemetry,用于接入 OTLP 指標(biāo)與追蹤,開箱即用。 
- API 版本控制
 
- Spring MVC 與 Spring WebFlux 新增 API 版本控制的自動(dòng)配置,便于在接口演進(jìn)時(shí)平滑管理不同版本。
 
- @HttpServiceClient 注解
 
- 標(biāo)注 
@org.springframework.web.service.registry.HttpServiceClient的接口會(huì)自動(dòng)注冊(cè)為 Bean,簡(jiǎn)化遠(yuǎn)程調(diào)用配置。 
- JSpecify 可空性注解
 
- Spring Boot 引入了 JSpecify 的可空性注解,對(duì) Kotlin 與空值檢測(cè)器有更好支持。
 
- autoconfigure-classic 模塊
 
- 新增 
spring-boot-autoconfigure-classic,提供與 Spring Boot 3 類似的體驗(yàn),減少模塊間依賴沖突。 
- 可觀測(cè)性模塊重命名
 
- 包括 
spring-boot-metrics、spring-boot-observation、spring-boot-tracing,統(tǒng)一了包名與模塊劃分。 
依賴升級(jí)
Spring Boot 4.0.0 M2 對(duì)多個(gè)依賴進(jìn)行了更新,主要包括:
- Spring Framework 
7.0.0-M8 - Spring Data 
2025.1.0-M5 - Spring Security 
7.0.0-M2 - Micrometer 
1.16.0-M2 - Hibernate 
7.1 - Jackson 
2.20 (rc) - Jetty 
12.1 
其他優(yōu)化
- 日志改進(jìn)
 
- Logback 默認(rèn)字符集統(tǒng)一為 UTF-8(與 Log4j2 保持一致)。
 - 新增配置 
logging.console.enabled=false可禁用控制臺(tái)日志輸出。 
- 虛擬線程支持
 
- 當(dāng) 
spring.threads.virtual.enabled=true時(shí),基于 JDK HttpClient 的自動(dòng)配置 HTTP 客戶端將自動(dòng)使用 虛擬線程,提升并發(fā)處理能力。 
結(jié)論
Spring Boot 4.0 的更新,堪稱一次“生態(tài)大洗牌”。Undertow 的退出 讓很多依賴它的團(tuán)隊(duì)需要重新思考架構(gòu)選型,短期內(nèi) Tomcat 與 Jetty 仍會(huì)是主要內(nèi)嵌容器。而長(zhǎng)遠(yuǎn)來看,如果 Undertow 能盡快跟進(jìn) Servlet 6.1 規(guī)范,或許未來會(huì)有“回歸”的機(jī)會(huì)。
與此同時(shí),Spring Boot 4 帶來了 更強(qiáng)的可觀測(cè)性支持(OpenTelemetry)、API 版本控制、以及 Gradle 9 的適配,這些都體現(xiàn)了它在云原生與現(xiàn)代化開發(fā)方向的演進(jìn)。
開發(fā)者需要關(guān)注的不僅是 Undertow 的移除,更要在升級(jí)過程中,做好 依賴遷移 與 構(gòu)建工具升級(jí),以確保項(xiàng)目能夠順利過渡。
更多詳細(xì)信息可以查看官方發(fā)布說明:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0.0-M2-Release-Notes















 
 
 















 
 
 
 