概述
2024年10月23日,Spring Boot 团队正式发布了 4.0.0-RC1 版本,这是 Spring Boot 4.0 系列的首个候选发布版本,标志着 Spring Boot 正式迈向下一个重要里程碑。此次发布包含了大量的新特性、重构和依赖升级,为开发者带来更现代化、更模块化的开发体验。🌟 核心亮点
1. Jackson 3 全面支持
Spring Boot 4.0 引入了对 Jackson 3 的完整支持,这是一个重大升级:- 自动检测 Jackson 3 模块:框架能够自动发现并配置 Jackson 3 相关模块
- Jackson 2 兼容模块:提供了专门的 Jackson 2 模块以简化升级工作
- 配置属性优化:新增配置属性以实现与 Spring Boot 3 的 Jackson 2 默认配置最佳兼容
- 类型重命名:将 Jackson 特定的
Json*注解和类重命名为Jackson*,使命名更加清晰 - JsonMapper 优先:在可行的地方使用
JsonMapper替代ObjectMapper - SharedJsonMapper:将
SharedObjectMapper重命名为SharedJsonMapper
- 将
spring.jackson.datetime.<feature-name>移至spring.jackson.datatype.datetime - 重命名 JsonMapper 特定属性,明确标识为 JSON 相关
2. 模块化重构
Spring Boot 4.0 进行了大规模的模块化改造,提升了项目结构的清晰度:- spring-boot-tx 重命名:
spring-boot-tx模块重命名为spring-boot-transaction - 端点包重构:合理化 endpoint 相关包结构
- Cloud Foundry 重构:重新组织
spring-boot-cloudfoundry包结构 - 测试模块模块化:
spring-boot-test-autoconfigure实现模块化 - RSocket 模块优化:明确
spring-boot-rsocket不再依赖spring-web - 配置类命名统一:将
*DataAutoConfiguration重命名为Data*AutoConfiguration - 类型过滤器调整:所有类型排除过滤器改为 package-private
3. Java 平台支持升级
- Java 25 支持:在
JavaVersion枚举中新增TWENTY_FIVE - GraalVM 基线升级:将 GraalVM 最低要求提升至 25 版本
- 无参数 main 方法支持:修复启动器无法找到无参数 main 方法的问题
- 包私有 Main 类支持:修复 Java 25 中包私有 Main 类无法被构建插件找到的问题
4. 测试增强
- RestTestClient 支持:新增对
RestTestClient的支持 - 重定向行为变更:更新
TestRestTemplate的重定向行为 - JUnit Jupiter 6.0:升级到 JUnit Jupiter 6.0.0
5. 数据格式和序列化
- CBOR 支持:为 Jackson 的 CBOR 数据格式提供自动配置
- JSON Schema 支持:增强 JSON Schema 相关功能
6. 云平台扩展
- AWS ECS 支持:将 AWS ECS 添加到云平台支持列表
- 移除 Bitnami 支持:不再支持 Bitnami
7. HTTP 客户端配置优化
- 配置属性合理化:统一 HTTP 客户端配置属性
- Jetty 客户端增强:在
JettyClientHttpConnectorBuilder中支持配置HttpClientTransport - API 版本控制:明确客户端的 API 版本控制不从服务器配置推断
8. 数据库和持久化
- Neo4j 升级:要求 Neo4j Java Driver 6.0.0,并使用 Neo4j Java Driver BOM
- SSL Bundle 配置:在
RedisConnectionDetails中合理化 SSL bundle 配置 - Elasticsearch Sniffer:提供配置属性以启用/禁用 Elasticsearch Client 的 sniffer
- Liquibase Schema:使用
liquibaseSchema替代defaultSchema
9. 消息队列优化
- Spring AMQP 重试配置:改进 Spring AMQP 重试机制的配置方式
- RSocket 消息处理:为 RSocket 消息自动配置添加
@ControllerAdvice支持
10. 可观测性增强
- @ObservationKeyValue 支持:新增对
@ObservationKeyValue注解的支持 - 指标和追踪属性:重新审视指标和追踪测试属性
- Devtools 追踪:配置 devtools 默认将追踪概率设置为 100%
- MicrometerTracing:使用
MicrometerTracing而非旧配置方式配置 Lettuce
11. 开发体验改进
- LiveReload 默认禁用:LiveReload 服务器默认关闭
- 开发工具标记:允许将 jar 标记为开发工具以从 uber-jar 中排除
- Maven 插件优化:Maven 插件默认排除可选依赖
- CycloneDX Gradle Plugin:将 CycloneDX Gradle Plugin 最低支持版本提升至 3.0.0
🗑️ 移除的功能
为了保持技术栈的现代化,Spring Boot 4.0 移除了一些过时的支持:- RedisAutoConfiguration:移除
RedisAutoConfiguration - Spring Pulsar Reactive:移除 Spring Pulsar Reactive 支持
- Undertow:Undertow 暂未适配 Spring Boot 4
- 嵌入式 JAR 启动脚本:移除对嵌入式 jar 启动脚本的支持
- Spring Session 数据存储:
- 移除 Spring Session Data MongoDB 支持
- 移除 Spring Session Hazelcast 支持
- Spock:暂时移除 Spock,直到其支持 Groovy 5
- REST Assured:暂时移除 REST Docs 的 REST Assured 集成,直到 REST Assured 支持 Groovy 5
- ConcurrentReferenceCachingMetadataReaderFactory:移除此类
- SQL 和 Reactor Starter:移除这些 starter,因为它们仅用于传递依赖
📦 重要依赖升级
核心框架
- Spring Framework 7.0.0-RC2
- Spring Security 7.0.0-RC1
- Spring Data BOM 2025.1.0-RC1
- Spring Batch 6.0.0-RC1
- Spring Integration 7.0.0-RC1
响应式和消息
- Reactor BOM 2025.0.0-RC1
- Spring AMQP 4.0.0-RC1
- Spring Kafka 4.0.0-RC1
- Spring Pulsar 2.0.0-RC1
- Netty 4.2.7.Final
数据库驱动
- Neo4j Java Driver 6.0.1
- MongoDB 5.6.1
- PostgreSQL 42.7.8
- MSSQL JDBC 13.2.1.jre11
- Jedis 7.0.0
序列化和数据格式
- Jackson BOM 3.0.1
Web 容器
- Tomcat 11.0.13
- Jetty 12.1.3
- Jetty Reactive HTTPClient 4.1.0
持久化和 ORM
- Hibernate 7.1.4.Final
- jOOQ 3.19.27
- Liquibase 5.0.1
- Flyway 11.14.1
可观测性
- Micrometer 1.16.0-RC1
- Micrometer Tracing 1.6.0-RC1
- OpenTelemetry 1.55.0
测试
- JUnit Jupiter 6.0.0
- Mockito 5.20.0
- AssertJ 3.27.6
- Testcontainers 2.0.1
- Selenium 4.37.0
- HtmlUnit 4.17.0
语言和运行时
- Kotlin 2.2.20
- Groovy 5.0.2
- Lombok 1.18.42
构建工具
- Native Build Tools Plugin 0.11.2
- Maven Compiler Plugin 3.14.1
- Maven Javadoc Plugin 3.12.0
其他重要库
- Elasticsearch Client 9.1.5
- Cassandra Driver 4.19.1
- ActiveMQ 6.1.8
- Artemis 2.43.0
- RabbitMQ AMQP Client 5.27.0
- Log4j2 2.25.2
- Logback 1.5.20
总结
Spring Boot 4.0.0-RC1 是一个重要的里程碑版本,它不仅带来了 Jackson 3 支持、模块化重构等重大改进,还为未来的发展奠定了坚实基础。通过移除过时功能、优化架构设计,Spring Boot 继续保持其作为 Java 企业级应用开发首选框架的地位。社区反馈
- 升级体验:多数用户反馈从 Spring Boot 3.x 升级到 4.0.0-RC1 的过程相对平滑,主要工作集中在 Jackson 3 的适配上
- 性能提升:部分用户报告在启动速度和内存占用方面有所改善
- 兼容性问题:少数第三方库可能存在兼容性问题,建议在升级前充分测试
升级建议
建议开发者采取以下步骤:- 在测试环境中试用:先在非生产环境中进行充分测试
- 关注依赖兼容性:检查项目中使用的第三方库是否支持 Spring Boot 4.0
- 重点测试 Jackson 相关功能:如果项目大量使用 JSON 序列化/反序列化,需要重点关注
- 参与社区反馈:遇到问题及时向社区或官方反馈