Spring Boot 4.0.0-RC1 已经正式发布

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 现代化

java 复制代码
// 之前使用 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 版本

启动器改进

bash 复制代码
// 支持无参数 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下使用

bash 复制代码
@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

📨 消息队列优化

配置改进

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:移除响应式支持

Undertow:只适配 Spring Boot 4-M1

嵌入式 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 这次重大升级为开发者带来了更现代化、更高效的开发体验,虽然需要一定的迁移成本,但长远来看将为项目维护和性能提升带来显著收益。

相关推荐
fenglllle15 小时前
http trailer 与 http2
http·wireshark·1024程序员节
程序员三明治15 小时前
Spring AOP:注解配置与XML配置双实战
java·后端·spring·代理模式·aop·1024程序员节
王嘉俊92515 小时前
HarmonyOS 超级终端与服务卡片开发:打造无缝多设备交互体验
华为·架构·harmonyos·arkts·1024程序员节
红宝村村长15 小时前
【学习笔记】大模型
深度学习·1024程序员节
2501_9293826515 小时前
[Switch大气层]纯净版+特斯拉版 20.5.0大气层1.9.5心悦整合包 固件 工具 插件 前端等资源合集
前端·游戏·switch·1024程序员节·单机游戏
limingade15 小时前
手机摄像头如何识别体检的色盲检查图的数字和图案(下)
android·1024程序员节·色盲检查图·手机摄像头识别色盲图案·android识别色盲检测卡·色盲色弱检测卡
毕设源码-赖学姐15 小时前
【开题答辩全过程】以基于Hadoop的电商数据分析系统为例,包含答辩的问题和答案
大数据·hadoop·分布式·1024程序员节
第七序章15 小时前
【C + +】unordered_set 和 unordered_map 的用法、区别、性能全解析
数据结构·c++·人工智能·算法·哈希算法·1024程序员节
熊文豪15 小时前
昇腾NPU部署GPT-OSS-20B混合专家模型:从环境配置到性能优化的完整实践指南
昇腾·1024程序员节·昇腾npu·gpt-oss-20b