Spring Boot 4.0 新特性全面解析:重大升級與現代化改造
Spring Boot 4.0 作為一次重大版本升級,帶來了眾多令人振奮的新特性和改進。本文將深入解析這些變化,幫助開發者更好地理解和適應這一重要更新。
🚀 Jackson 3 全面支持
Spring Boot 4.0 引入了對 Jackson 3 的完整支持,這是本次升級的核心特性之一:
核心改進
自動檢測機制:框架能夠自動發現並配置 Jackson 3 相關模塊
向後兼容:提供專門的 Jackson 2 模塊以簡化升級工作
配置優化:新增配置屬性實現與 Spring Boot 3 的 Jackson 2 默認配置最佳兼容
API 現代化
// 之前使用 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// 現在推薦使用 JsonMapper
JsonMapper mapper = JsonMapper.builder().build();
命名規範統一
將 Jackson 特定的 Json* 註解和類重命名為 Jackson*
SharedObjectMapper 重命名為 SharedJsonMapper
配置屬性調整:
spring.jackson.datetime. 移至 spring.jackson.datatype.datetime
重命名 JsonMapper 特定屬性,明確標識為 JSON 相關
🏗️ 模塊化重構
Spring Boot 4.0 進行了大規模的模塊化改造,提升了項目結構的清晰度:
模塊重命名與重組
spring-boot-tx → spring-boot-transaction
端點包結構合理化
Cloud Foundry 相關包重新組織
測試模塊實現完全模塊化
架構優化
RSocket 模塊不再依賴 spring-web
配置類命名統一:
RedisAutoConfiguration → DataRedisAutoConfiguration
spring-boot-starter-aop → spring-boot-starter-aspectj
所有類型排除過濾器改為 package-private
☕ Java 平台支持升級
版本支持
Java 25 支持:在 JavaVersion 枚舉中新增 TWENTY_FIVE
GraalVM 基線升級:最低要求提升至 25 版本
啓動器改進
// 支持無參數 main 方法
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
// 修復包私有 Main 類的構建問題
class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
🧪 測試增強
新特性引入
RestTestClient 支持:提供更現代化的測試客户端
TestRestTemplate 重定向行為更新:更符合實際生產環境
Spring-framework 升級到最新版本 7.0.0 時代
JUnit Jupiter 6.0:升級到最新版本 6.0.0 時代
新版spring-security-oauth2-authorization-server已經合併到spring-security下使用
@SpringBootTest
class MyApplicationTests {
@Autowired
private RestTestClient restTestClient;
@Test
void testEndpoint() {
restTestClient.get()
.uri("/api/endpoint")
.exchange()
.expectStatus().isOk();
}
}
📊 數據格式和序列化
格式支持擴展
CBOR 支持:為 Jackson 的 CBOR 數據格式提供自動配置
JSON Schema 增強:改進 JSON Schema 相關功能
☁️ 雲平台擴展
平台支持調整
新增 AWS ECS 支持:擴展雲平台覆蓋範圍
移除 Bitnami 支持:簡化支持矩陣
🌐 HTTP 客户端配置優化
配置統一
HTTP 客户端配置屬性合理化
Jetty 客户端增強,支持配置 HttpClientTransport
客户端 API 版本控制不再從服務器配置推斷
💾 數據庫和持久化
驅動升級與優化
Neo4j 升級:要求 Neo4j Java Driver 6.0.0,使用 Neo4j Java Driver BOM
Redis SSL 配置:在 RedisConnectionDetails 中合理化 SSL bundle 配置
Elasticsearch 增強:提供配置屬性控制 sniffer 啓用/禁用
Liquibase Schema:使用 liquibaseSchema 替代 defaultSchema
可以替換 Undertow的spring-boot-starter-jetty
📨 消息隊列優化
配置改進
Spring AMQP 重試機制配置方式改進
RSocket 消息自動配置添加 @ControllerAdvice 支持
🔍 可觀測性增強
監控與追蹤
新增 @ObservationKeyValue 註解支持
指標和追蹤測試屬性重新審視
Devtools 默認將追蹤概率設置為 100%
使用 MicrometerTracing 配置 Lettuce
🛠️ 開發體驗改進
工具鏈優化
LiveReload 默認禁用:減少資源消耗
開發工具標記:允許將 jar 標記為開發工具以從 uber-jar 中排除
Maven 插件優化:默認排除可選依賴
CycloneDX Gradle Plugin:最低支持版本提升至 3.0.0
🗑️ 移除的功能
為了保持技術棧的現代化,Spring Boot 4.0 移除了以下過時功能:
主要移除項
Spring Pulsar Reactive:移除響應式支持
嵌入式 JAR 啓動腳本:移除支持
Spring Session 數據存儲:
移除 MongoDB 支持
移除 Hazelcast 支持
測試框架調整:
暫時移除 Spock(等待 Groovy 5 支持)
暫時移除 REST Docs 的 REST Assured 集成類移除
ConcurrentReferenceCachingMetadataReaderFactory:已移除
SQL 和 Reactor Starter:移除僅用於傳遞依賴的 starter
📦 重要依賴升級
Spring Boot 4.0 包含了眾多核心依賴的版本升級,確保與最新技術棧保持同步。
💡 升級建議
逐步遷移:先從非核心項目開始升級
測試覆蓋:確保有充分的測試覆蓋 before 和 after 升級
依賴檢查:檢查所有第三方依賴是否支持 Spring Boot 4.0
配置更新:按照官方遷移指南更新配置屬性
Spring Boot 4.0 這次重大升級為開發者帶來了更現代化、更高效的開發體驗,雖然需要一定的遷移成本,但長遠來看將為項目維護和性能提升帶來顯著收益。