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