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

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心7 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552714 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552718 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552720 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节