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

相关推荐
yBmZlQzJ2 天前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
yBmZlQzJ2 天前
内网穿透工具通过端口转发实现内外网通信
运维·经验分享·docker·容器·1024程序员节
数据皮皮侠AI3 天前
数字经济政策工具变量数据(2008-2023)
大数据·数据库·人工智能·笔记·1024程序员节
网安_秋刀鱼4 天前
【java安全】shiro反序列化1(shiro550)
java·开发语言·安全·web安全·网络安全·1024程序员节
unable code6 天前
攻防世界-Misc-Wire1
网络安全·ctf·misc·1024程序员节
开开心心就好6 天前
版本转换工具,支持Win双系统零售批量版
linux·运维·服务器·pdf·散列表·零售·1024程序员节
开开心心就好7 天前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
unable code7 天前
攻防世界-Misc-4-1
网络安全·ctf·misc·1024程序员节
yBmZlQzJ9 天前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节