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

相关推荐
CoderYanger3 小时前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger4 小时前
递归、搜索与回溯-FloodFill:33.太平洋大西洋水流问题
java·算法·leetcode·1024程序员节
CoderYanger7 小时前
动态规划算法-斐波那契数列模型:2.三步问题
开发语言·算法·leetcode·面试·职场和发展·动态规划·1024程序员节
CoderYanger7 小时前
动态规划算法-简单多状态dp问题:16.买卖股票的最佳时机含手续费
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger8 小时前
C.滑动窗口-求子数组个数-越短越合法——3258. 统计满足 K 约束的子字符串数量 I
java·开发语言·算法·leetcode·1024程序员节
CoderYanger9 小时前
动态规划算法-路径问题:9.最小路径和
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger9 小时前
动态规划算法-路径问题:7.礼物的最大价值
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger11 小时前
动态规划算法-简单多状态dp问题:12.打家劫舍Ⅱ
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
金融小师妹11 小时前
机器学习驱动分析:ADP就业数据异常波动,AI模型预测12月降息概率达89%
大数据·人工智能·深度学习·编辑器·1024程序员节
CoderYanger12 小时前
动态规划算法-简单多状态dp问题:18.买卖股票的最佳时机Ⅳ
开发语言·算法·leetcode·动态规划·1024程序员节