spring boot 3.x强制要求jdk 17+,废弃javax.改用jakarta.,弃用spring.factories改用autoconfiguration.imports,推荐record绑定@configurationproperties,并原生支持graalvm构建。

Spring Boot 3.0 以上版本(即 3.x 系列,不含 4.x)和旧版(主要是 2.x,尤其是 2.7 及更早)在安装和使用层面的差异,不只是“换个版本号”那么简单——它涉及运行环境、构建方式、配置逻辑和开发范式四个关键维度。
最低 JDK 版本要求不同
Spring Boot 3.0+ 强制要求 JDK 17 或更高版本(推荐 JDK 17–21),不再兼容 JDK 8/11。
- 安装前必须先升级本地 JDK,并确认
java -version输出 ≥ 17 - 若项目仍用 JDK 8,直接替换 starter 版本会编译失败,报
Unsupported class file major version错误 - IDE(如 IntelliJ、Eclipse)需同步切换项目 SDK 和语言级别为 17+
依赖坐标和包名有实质性变更
Jakarta EE 9+ 迁移带来全局性命名替换:
- 所有
javax.*包(如javax.servlet.http.HttpServlet)已改为jakarta.*(对应jakarta.servlet.http.HttpServlet) - 常见影响点:
-
spring-boot-starter-web内部依赖的 Servlet API、JPA 注解(如@Entity来自jakarta.persistence) - 若手动引入
hibernate-validator,需改用org.hibernate.validator:hibernate-validator:8.0+(适配 Jakarta) - 自定义 Filter、Servlet 或 JPA 实体类若含
javax导包,必须批量替换
-
构建方式和自动配置机制变了
-
spring.factories文件被彻底废弃,取而代之的是META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - 该文件需以纯文本形式列出自动配置类全限定名(每行一个),不再支持键值对或条件注解写法
- 第三方 Starter 若未适配 3.x,其自动配置将失效(表现为 Bean 无法加载、功能不生效)
配置绑定更严格,推荐用 record
-
@ConfigurationProperties默认启用构造函数绑定(Constructor Binding),鼓励使用 record:@ConfigurationProperties(prefix = "app.db") public record DbConfig(String url, int port) {} - 传统 setter 方式仍可用,但需显式加
@ConstructorBinding或设spring.configuration-properties.bind-constructors=false(不推荐) - 环境变量映射规则微调:
APP_DB_URL→app.db.url依然有效,但嵌套属性(如app.db.pool.max-size)对大小写更敏感
原生镜像支持成为标配能力
- Spring Boot 3.0+ 内置
spring-aot模块,配合 GraalVM 可直接构建 native image - 安装时需额外步骤:
- 下载 GraalVM(≥ 22.3),并配置
JAVA_HOME指向它 - Maven 中添加
native-maven-plugin插件(非spring-native,后者已归档) - 运行
mvn spring-boot:build-image或mvn native:compile
- 下载 GraalVM(≥ 22.3),并配置
- 旧版无法原生编译,强行使用需第三方插件且稳定性差
不复杂但容易忽略。











