Spring Boot 3.x 要求 JDK 17+、Maven 3.8.6+ 或 Gradle 8.0+ 并配置 Java 工具链,父 POM 升级为 3.x 版本,强制 Jakarta EE 迁移(javax→jakarta),Tomcat 10+,配置元数据改用 AutoConfiguration.imports 文件。

Spring Boot 2.x 和 3.x 的安装配置差异不是“下载安装包”式的操作区别,而是体现在项目初始化、环境准备、依赖声明和基础配置层面。核心变化源于 Java 版本基线提升、Jakarta EE 迁移和框架底层重构,配置稍有不慎就会编译失败或启动报错。
Java 环境与构建工具要求不同
这是最前置、最刚性的区别:
- Spring Boot 2.x:支持 JDK 8 起步,推荐 JDK 11;Maven 3.5+、Gradle 6.x~7.x 均可正常工作
- Spring Boot 3.x:强制要求 JDK 17 或更高版本(如 JDK 21),不兼容 JDK 8/11;Maven 需 3.8.6+,Gradle 推荐 8.0+ 并必须配置 Java 工具链
- Gradle 中需显式声明:
java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } - Maven 的
pom.xml中必须设置:17
父 POM 和起步依赖版本号变更
项目骨架的起点不同,不能直接复用旧版配置:
- 2.x 使用
spring-boot-starter-parent2.7.x(最终版)作为 parent,例如:2.7.18 - 3.x 必须切换为 3.x 系列 parent,例如:
3.3.2 (截至 2026 年主流稳定版) - 起步依赖坐标本身不变(如
spring-boot-starter-web),但内部传递依赖已全面升级(如 Tomcat 10+、Hibernate 6、Spring Security 6)
Jakarta EE 包名迁移直接影响代码和配置
这不是可选优化,而是编译级强制变更:
- 所有
javax.*导入必须改为jakarta.*,例如:
–javax.servlet.http.HttpServlet→jakarta.servlet.http.HttpServlet
–javax.validation.constraints.NotBlank→jakarta.validation.constraints.NotBlank - Web 容器自动切换:2.x 默认用 Tomcat 9,3.x 默认用 Tomcat 10.1+(仅支持
jakarta.*) - 若使用 Jetty 或 Undertow,也必须升级到对应 Jakarta 兼容版本(Jetty 11 / Undertow 2.2+)
- 第三方库(如 Lombok、MapStruct、Validation 实现)必须确认支持 Jakarta EE 9+,否则编译报错
配置方式与默认行为调整
部分配置项语义或位置发生变化,容易被忽略:
-
@ConfigurationProperties默认启用构造函数绑定,更严格校验类型转换,旧的 setter 绑定需显式加@ConstructorBinding或改用新写法 - Actuator 端点路径保持
/actuator/xxx不变,但安全暴露策略默认更保守(management.endpoints.web.exposure.include=health,info) - 错误响应格式升级:开启
spring.mvc.problemdetails.enabled=true后,返回 RFC 7807 标准的 Problem Details JSON,而非 2.x 的简单 Map 结构 - 自动配置类注册机制从
META-INF/spring.factories迁移到META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(换行分隔)

















