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

相关推荐
金融小师妹3 小时前
基于多源政策信号解析与量化因子的“12月降息预期降温”重构及黄金敏感性分析
人工智能·深度学习·1024程序员节
GIS数据转换器8 小时前
基于GIS的智慧旅游调度指挥平台
运维·人工智能·物联网·无人机·旅游·1024程序员节
南方的狮子先生19 小时前
【C++】C++文件读写
java·开发语言·数据结构·c++·算法·1024程序员节
Neil今天也要学习1 天前
永磁同步电机无速度算法--基于三阶LESO的反电动势观测器
算法·1024程序员节
开开心心_Every1 天前
专业视频修复软件,简单操作效果好
学习·elasticsearch·pdf·excel·音视频·memcache·1024程序员节
liu****2 天前
16.udp_socket(三)
linux·开发语言·数据结构·c++·1024程序员节
草莓熊Lotso2 天前
《算法闯关指南:优选算法--位运算》--38.消失的两个数字
服务器·c++·算法·1024程序员节
unable code3 天前
攻防世界-Misc-can_has_stdio?
网络安全·ctf·misc·1024程序员节
思茂信息3 天前
CST License(Flexnet)设置与问题处理方法
服务器·网络·单片机·3d·php·1024程序员节·cst
2301_797892833 天前
论文阅读:《Hypergraph Motif Representation Learning》
论文阅读·1024程序员节