这是一篇关于 Spring Boot 3.x 新特性的文章,重点介绍了其在 Jakarta EE 迁移、可观测性和 AOT 编译方面的变革。
Spring Boot 3.x 的发布,不仅仅是一次常规的版本升级,它标志着 Spring 生态系统进入了一个崭新的纪元。作为自 2018 年 Spring Boot 2.0 发布以来的首个主版本迭代,它带来了根本性的变革和令人兴奋的新特性。对于每一位 Java 开发者而言,理解并掌握这些变化,意味着能够构建更现代化、更高性能、更易于观测的云原生应用。
本文将聚焦于 Spring Boot 3.x 的三大核心变革:基于 Jakarta EE 9+ 的包名迁移、全新的可观测性(Observability)体系,以及对 AOT(Ahead-of-Time)编译与 GraalVM 原生镜像的一流支持。
一、基石之变:从javax到jakarta的全面迁移
Spring Boot 3.x 最具影响力的变化,无疑是其底层依赖从 Java EE 迁移到了 Jakarta EE 9+。这不仅仅是一个名称的改变,更是一次彻底的“命名空间”革命。
1. 为什么会发生变化?
Java EE 在捐赠给 Eclipse 基金会后,因商标问题,原有的javax.*包名无法继续使用。因此,Jakarta EE 9 作为一个里程碑版本,将所有 API 的包名从javax.*切换到了jakarta.*。
2. 这对开发者意味着什么?
这是一个破坏性变更。所有依赖于 Servlet API、JPA、Bean Validation 等标准规范的代码,都必须更新其import语句。
迁移前 (Spring Boot 2.x):
import javax.servlet.http.HttpServletRequest; import javax.persistence.Entity; import javax.persistence.Id; import javax.validation.constraints.NotBlank; @Entity public class User { @Id private Long id; @NotBlank(message = "Username cannot be blank") private String username; // ... } // 在 Controller 中 public void processRequest(HttpServletRequest request) { // ... }迁移后 (Spring Boot 3.x):