最后更新:2026-07-02
适用场景:Spring Boot 2 升级 Spring Boot 3、JDK8 / JDK11 升级 JDK17、javax 迁移 jakarta、Spring Framework 6、Spring Security 6、Maven / Gradle 构建失败、Spring Boot 3 启动报错
Spring Boot 2 升级到 Spring Boot 3,不是简单把版本号从:
<version>2.7.x</version>
改成:
<version>3.x.x</version>
这么简单。
这次升级涉及一整套技术栈变化:
Java 17
Spring Framework 6
Jakarta EE 10
javax.* 到 jakarta.*
Spring Security 6
Hibernate 6
Maven / Gradle 版本
第三方 Starter 兼容性
构建工具和 CI/CD 环境
Spring Boot 3.0 官方迁移指南明确说明:Spring Boot 3.0 要求 Java 17 或更高版本,不再支持 Java 8,并且要求 Spring Framework 6.0。官方也建议在开始升级前,先把项目升级到最新的 Spring Boot 2.7.x 版本,再迁移到 Spring Boot 3。(GitHub)
本文按实际项目迁移顺序,整理 Spring Boot 2 升级到 Spring Boot 3 的完整流程、常见修改点和报错排查方法。
一、先说结论:Spring Boot 2升级3的推荐路线
最稳的升级路径是:
1. 先升级到最新 Spring Boot 2.7.x
2. 清理 Spring Boot 2.x 中已经废弃的 API 和配置
3. 升级 JDK 到 17 或更高版本
4. 确认 Maven / Gradle / IDEA / CI 都使用 JDK17+
5. 检查 Spring Cloud、第三方 Starter、公司内部 SDK
6. 将 javax.* 相关依赖和代码迁移到 jakarta.*
7. 升级 Spring Boot 到 3.x
8. 处理配置属性变更
9. 处理 Spring Security 6 变更
10. 处理 JPA / Hibernate 6 变更
11. 运行完整测试
12. 最后再考虑 JDK21、JDK25 等更高版本
不要从很老的版本直接跳:
Spring Boot 2.1 -> Spring Boot 3.5
Spring Boot 2.3 -> Spring Boot 3.5
Spring Boot 2.5 -> Spring Boot 3.5
更推荐:
当前版本 -> 最新 2.7.x -> 3.x
Spring Boot 官方迁移文档也强调,升级前应先升级到最新可用的 2.7.x,以确保项目基于该分支中最新的依赖集合。(GitHub)
二、Spring Boot 2升级3之前要先检查什么?
升级前先不要急着改版本号,先做一次环境和依赖盘点。
建议检查下面这些内容:
| 检查项 | 需要确认什么 |
|---|---|
| 当前 Spring Boot 版本 | 是 2.1、2.3、2.5、2.6 还是 2.7 |
| 当前 JDK 版本 | 是否已经是 JDK17 或更高 |
| Maven / Gradle 版本 | 是否能支持目标 JDK 和 Spring Boot 3 |
| Spring Cloud 版本 | 是否有对应 Spring Boot 3 的兼容版本 |
| Spring Security | 是否使用了旧配置方式 |
| JPA / Hibernate | 是否依赖 Hibernate 5 的行为 |
| javax 包 | 是否使用了 javax.servlet、javax.persistence、javax.validation 等 |
| 第三方 Starter | 是否支持 Spring Boot 3 |
| 公司内部 SDK | 是否仍依赖 Spring Boot 2 或 javax |
| CI/CD | 构建环境是否已升级 JDK17 |
| Docker 镜像 | 基础镜像是否仍是 JDK8 / JDK11 |
| 测试覆盖 | 是否有接口测试、集成测试、回归测试 |
一句话:
Spring Boot 2 升级 3,真正难的不是改 parent 版本,而是整条依赖链都要兼容。
三、第一步:先升级到最新Spring Boot 2.7.x
不要直接从老版本跳到 Spring Boot 3。
如果你当前是:
Spring Boot 2.1
Spring Boot 2.3
Spring Boot 2.5
Spring Boot 2.6
建议先升级到:
Spring Boot 2.7.x
这样做有几个好处:
1. 先适配 Spring Boot 2.x 最后一个主线
2. 先处理 2.x 中已经废弃的配置和 API
3. 让依赖版本更接近 Spring Boot 3
4. 降低一次性升级跨度
5. 出问题时更容易定位
Spring Boot 3 迁移指南中也提醒,Spring Boot 2.x 中已经废弃的类、方法和属性,在 Spring Boot 3 中可能已经被移除,因此升级前应先清理这些废弃用法。(GitHub)
Maven 示例:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
Gradle 示例:
plugins {
id 'org.springframework.boot' version '2.7.18'
id 'io.spring.dependency-management' version '1.1.7'
}
先保证项目在 Spring Boot 2.7.x 下可以正常:
mvn clean test
mvn clean package
或者:
./gradlew clean test
./gradlew build
再进入下一步。
四、第二步:升级JDK到17或更高版本
Spring Boot 3 最低要求 Java 17。Spring Boot 3.0 发布说明也明确提到,如果还在使用 Java 8 或 Java 11,需要先升级 JDK 才能开发 Spring Boot 3.0 应用。(GitHub)
建议优先选择:
JDK17
原因:
Spring Boot 3 的最低基线就是 JDK17
生态兼容性更稳
很多老项目从 JDK8 / 11 升级到 17 更容易控制风险
如果是新项目,可以考虑:
JDK21
但老项目迁移时,建议先完成:
Spring Boot 2 -> Spring Boot 3
JDK8 / 11 -> JDK17
等项目稳定后,再评估:
JDK17 -> JDK21
不要一次性同时做太多大升级。
检查当前JDK
java -version
javac -version
检查Maven使用的JDK
mvn -version
重点看:
Java version
Java home
检查Gradle使用的JDK
./gradlew --version
或者 Windows:
gradlew.bat --version
如果你还没有安装 JDK17,可以看:
各版本JDK镜像下载地址:JDK8 / JDK11 / JDK17 / JDK21 / JDK25 / JDK26 下载与IDEA配置指南
Windows安装JDK与JAVA_HOME环境变量配置教程
五、第三步:升级Maven或Gradle环境
Spring Boot 3 项目中,JDK 升级了,Maven / Gradle 也要一起检查。
Maven项目
建议使用 Maven 3.6.3 或更高版本。当前 Spring Boot 官方系统要求页面中,Spring Boot 4.1.0 明确列出 Maven 3.6.3+、Gradle 8.14+ 或 9.x;Spring Boot 3.x 的维护版本也普遍要求 Maven 3.6.3 或更高。(Home)
执行:
mvn -version
重点检查:
Maven版本
Java version
Java home
如果遇到 Maven 使用 JRE、没有编译器等问题,可以看:
No compiler is provided in this environment解决办法
Gradle项目
Gradle 项目除了检查 Spring Boot 支持的 Gradle 版本,还要检查 Gradle 本身是否支持当前 JDK。
执行:
./gradlew --version
重点看:
Gradle版本
Launcher JVM
Daemon JVM
如果 Gradle Wrapper 太旧,可能会先报:
Unsupported class file major version
Could not open cp_settings generic class cache
Unsupported Java
可以参考:
Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速完整指南
六、第四步:修改Spring Boot版本
Maven项目
原来可能是:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<properties>
<java.version>8</java.version>
</properties>
升级后改成:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
</parent>
<properties>
<java.version>17</java.version>
</properties>
如果你想先升级到早期 3.x,也可以使用:
<version>3.0.13</version>
但实际项目中,更建议选择仍在维护的较新 3.x 分支。
Gradle项目
原来:
plugins {
id 'org.springframework.boot' version '2.7.18'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
}
java {
sourceCompatibility = '1.8'
}
升级后:
plugins {
id 'org.springframework.boot' version '3.5.15'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
如果你使用 Kotlin DSL:
plugins {
id("org.springframework.boot") version "3.5.15"
id("io.spring.dependency-management") version "1.1.7"
java
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
七、第五步:javax迁移到jakarta
这是 Spring Boot 2 升级 3 最容易遇到的代码层面问题。
Spring Boot 3 迁移指南说明:Spring Boot 3.0 使用 Jakarta EE 10 相关规范,例如 Servlet 6.0 和 JPA 3.1;同时 Jakarta EE 包名使用 jakarta.*,而不是旧的 javax.*。(GitHub)
常见旧写法
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
迁移后
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
常见对应关系:
| Spring Boot 2 | Spring Boot 3 |
|---|---|
javax.servlet.* | jakarta.servlet.* |
javax.persistence.* | jakarta.persistence.* |
javax.validation.* | jakarta.validation.* |
javax.annotation.* | jakarta.annotation.* |
javax.transaction.* | jakarta.transaction.* |
但不要机械全局替换所有 javax。
例如下面这些仍属于 Java SE / JDK 相关包,不能随便替换:
javax.crypto.*
javax.net.ssl.*
javax.sql.DataSource
javax.xml.*
建议做法:
1. 先升级依赖
2. 再迁移编译报错的 javax 包
3. 不要一键全局替换所有 javax
4. 每次替换后运行测试
八、常见依赖怎么改?
Servlet API
旧依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
新依赖:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
不过如果你使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
通常不需要自己手动引入 Servlet API。
Validation
旧依赖可能是:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
Spring Boot 项目中更推荐使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
代码中使用:
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
JPA
旧代码:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
新代码:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
九、第六步:检查第三方Starter和公司内部SDK
Spring Boot 3 升级失败,很多时候不是官方 Starter 的问题,而是第三方依赖没跟上。
重点检查:
Spring Cloud
MyBatis / MyBatis-Plus
Sa-Token
Swagger / Knife4j / Springdoc
ShardingSphere
Dubbo
XXL-JOB
Quartz
Elasticsearch Client
Redisson
公司内部SDK
自定义Starter
尤其注意这些情况:
仍依赖 javax.servlet
仍依赖 javax.validation
仍依赖 Hibernate 5
仍依赖 Spring Security 5
仍依赖旧版 Spring Framework
自定义自动配置仍使用旧 spring.factories 方式
Spring Boot 3 迁移指南提醒,如果项目中使用了 Spring Boot 没有管理的显式版本依赖,例如 Spring Cloud 或其他第三方组件,需要先确认兼容版本。(GitHub)
建议先执行:
mvn dependency:tree
或者:
./gradlew dependencies
看项目里是否还存在大量旧依赖。
十、第七步:处理Spring Security 6变更
如果项目使用 Spring Security,升级到 Spring Boot 3 时一定要重点检查。
Spring Boot 3.0 使用 Spring Security 6.0;官方迁移指南建议在升级到 Spring Boot 3.0 前,可以先将 Spring Boot 2.7 应用升级到 Spring Security 5.8,以简化迁移到 Spring Security 6.0 的过程。(GitHub)
旧写法:WebSecurityConfigurerAdapter
Spring Security 5.7 起已经弃用 WebSecurityConfigurerAdapter,官方建议迁移到基于组件的配置方式,例如定义 SecurityFilterChain Bean。(Home)
旧写法:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
新写法示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form.permitAll())
.build();
}
}
注意新旧方法名也有变化:
| 旧写法 | 新写法 |
|---|---|
authorizeRequests() | authorizeHttpRequests() |
antMatchers() | requestMatchers() |
继承 WebSecurityConfigurerAdapter | 声明 SecurityFilterChain Bean |
十一、第八步:处理配置属性变化
Spring Boot 3 中部分配置属性被重命名或移除。
官方迁移指南提供了 spring-boot-properties-migrator 模块,可以在应用启动时分析配置并打印诊断信息,还能临时迁移部分属性;但官方也提醒迁移完成后要移除该模块。(GitHub)
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
Gradle
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
启动应用后观察日志,处理配置提示。
处理完成后,删除该依赖:
不要长期把 spring-boot-properties-migrator 留在生产项目里。
十二、第九步:检查自动配置注册方式
如果你维护的是普通业务项目,通常不需要关心这个。
但如果你维护自定义 Starter,需要注意 Spring Boot 3 的自动配置注册方式变化。
Spring Boot 2.7 引入了:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
Spring Boot 3 中,使用 spring.factories 通过 org.springframework.boot.autoconfigure.EnableAutoConfiguration 注册自动配置的方式已被移除,应迁移到新的 imports 文件。(GitHub)
旧方式:
META-INF/spring.factories
内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demo.MyAutoConfiguration
新方式:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
内容:
com.example.demo.MyAutoConfiguration
如果你的公司内部有自定义 Starter,这是一个必须检查的点。
十三、第十步:处理Hibernate 6和JPA相关问题
Spring Boot 3 使用 Jakarta Persistence,也就是 jakarta.persistence.* 包名。
常见问题包括:
javax.persistence.Entity 找不到
旧版本 Hibernate 类型处理器不兼容
自定义 Dialect 报错
SQL 生成行为变化
分页或懒加载行为变化
字段命名策略变化
常见迁移:
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
改成:
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.Id;
如果项目使用 MyBatis,不代表完全不受影响。很多项目同时使用:
MyBatis
JPA注解
Validation注解
Servlet API
第三方Starter
所以仍然要全局搜索:
javax.
但不要盲目替换所有结果。
十四、第十一步:处理测试依赖
升级后,测试代码也经常报错。
常见问题:
JUnit 4老测试未迁移
Mockito版本过旧
Spring Security测试配置变化
MockMvc相关导入变化
javax.validation相关测试代码报错
测试配置属性被移除
建议至少执行:
mvn clean test
或者:
./gradlew test
如果项目没有测试,这次升级风险会明显更高。至少要人工覆盖:
登录认证
核心业务接口
数据库读写
文件上传下载
定时任务
消息队列消费
第三方接口调用
权限控制
十五、第十二步:检查Docker和CI/CD环境
很多项目本地跑通了,发到测试环境又挂了,原因是:
本地是 JDK17
CI/CD 还是 JDK8
Docker 镜像还是 openjdk:8
服务器 java -version 还是 1.8
检查 Dockerfile。
旧示例:
FROM openjdk:8-jdk
建议改成:
FROM eclipse-temurin:17-jdk
或者如果使用 JDK21:
FROM eclipse-temurin:21-jdk
CI/CD 中也要打印版本:
java -version
javac -version
mvn -version
Gradle 项目:
./gradlew --version
十六、常见报错一:invalid source release: 17
报错:
error: invalid source release: 17
常见原因:
pom.xml 要求 Java 17
但 Maven 实际使用的是 JDK8 或 JDK11
检查:
mvn -version
如果显示:
Java version: 1.8.0_xxx
那就说明 Maven 没有使用 JDK17。
解决:
1. 安装 JDK17
2. JAVA_HOME 指向 JDK17
3. Path 添加 %JAVA_HOME%\bin
4. IDEA Maven Runner JRE 改成 JDK17
5. 重新构建
十七、常见报错二:Unsupported class file major version 61
Unsupported class file major version 61
major version 61 对应 Java 17。
常见原因:
某些 class 文件是 JDK17 编译的
但当前运行环境低于 JDK17
解决:
升级运行环境到 JDK17 或更高。
更多版本对照可以看:
Java版本号与class文件major version对照表
十八、常见报错三:package javax.xxx does not exist
报错示例:
package javax.servlet does not exist
package javax.persistence does not exist
package javax.validation does not exist
原因:
Spring Boot 3 使用 jakarta.* 相关 API
项目代码仍然使用 javax.*
解决:
1. 升级对应依赖到 Jakarta 版本
2. 将业务代码中的相关 import 改为 jakarta.*
3. 检查第三方依赖是否仍使用 javax
4. 不要机械替换所有 javax
十九、常见报错四:ClassNotFoundException: javax.servlet.Filter
报错:
java.lang.ClassNotFoundException: javax.servlet.Filter
常见原因:
项目中某个第三方依赖仍然依赖旧的 javax.servlet API
排查:
mvn dependency:tree
搜索:
javax.servlet
如果某个旧 Starter 仍然依赖 javax.servlet,需要升级该 Starter,或者替换为支持 Spring Boot 3 的版本。
二十、常见报错五:WebSecurityConfigurerAdapter找不到
报错可能类似:
cannot find symbol: class WebSecurityConfigurerAdapter
或者:
class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.class] cannot be opened because it does not exist
原因:
Spring Security 6 不再使用旧的 WebSecurityConfigurerAdapter 配置方式
解决:
使用 SecurityFilterChain Bean 方式重写安全配置。
可以参考本文第十节。
二十一、常见报错六:配置属性被移除或不生效
表现:
升级后某些配置不再生效
启动日志提示配置属性已废弃或未知
处理:
1. 加入 spring-boot-properties-migrator
2. 启动应用查看迁移提示
3. 修改 application.yml / application.properties
4. 删除 migrator 依赖
不要长期依赖 migrator 运行生产系统。
二十二、推荐迁移清单
实际升级时,可以按下面清单执行:
1. 备份代码,建立升级分支
2. 升级到最新 Spring Boot 2.7.x
3. 清理 Spring Boot 2.x 废弃 API 和配置
4. 升级 JDK 到 17
5. 确认 mvn -version / gradle --version 使用 JDK17
6. 升级 Maven / Gradle Wrapper
7. 检查 Spring Cloud 和第三方 Starter
8. 升级 Spring Boot 到 3.x
9. 迁移 javax.* 到 jakarta.*
10. 修改 Spring Security 配置
11. 处理 JPA / Hibernate 相关问题
12. 加入 spring-boot-properties-migrator 检查配置
13. 运行单元测试和集成测试
14. 检查 Docker / CI / 服务器 JDK
15. 在测试环境灰度验证
16. 移除 spring-boot-properties-migrator
17. 准备回滚方案
二十三、建议不要一次性做太多升级
不推荐一次性这样升级:
Spring Boot 2.3 -> Spring Boot 3.5
JDK8 -> JDK21
Spring Security 5 -> 6
Hibernate 5 -> 6
MyBatis-Plus大版本升级
Spring Cloud大版本升级
Docker镜像换JDK21
这样一旦出错,很难判断是哪个变化导致的。
更稳的策略是:
第一阶段:Spring Boot升级到2.7.x
第二阶段:JDK升级到17
第三阶段:Spring Boot升级到3.x
第四阶段:处理jakarta和依赖兼容
第五阶段:稳定后再评估JDK21或更高版本
二十四、可以使用迁移工具,但不要完全依赖
Spring Boot 迁移指南列出了几类辅助迁移工具,包括 OpenRewrite、Spring Boot Migrator 和 IntelliJ IDEA 的迁移支持。(GitHub)
这些工具可以帮助做:
包名替换
配置迁移
部分API替换
依赖升级提示
但不要完全依赖工具。
原因:
业务代码语义需要人工判断
第三方依赖兼容性需要人工确认
安全配置迁移需要测试
数据库行为变化需要验证
比较稳的做法:
工具辅助迁移 + 人工Code Review + 自动化测试 + 测试环境验证
二十五、常见问题FAQ
1. Spring Boot 3必须使用JDK17吗?
是的,Spring Boot 3.0 要求 Java 17 或更高版本,不再支持 Java 8。(GitHub)
2. Spring Boot 2可以直接升级到Spring Boot 3吗?
可以,但不建议从很老的 2.x 直接跳。官方建议升级前先升到最新可用的 2.7.x。(GitHub)
3. javax必须全部替换成jakarta吗?
不是。Servlet、JPA、Validation 等 Jakarta EE 相关包要迁移,但不要全局机械替换所有 javax,例如 javax.net.ssl、javax.crypto、javax.sql 等不应该随便改。
4. Spring Boot 3为什么会出现package javax.persistence does not exist?
因为 Spring Boot 3 使用 Jakarta Persistence,对应包名是:
jakarta.persistence.*
不是:
javax.persistence.*
5. Spring Boot 3升级后Spring Security为什么报错?
Spring Boot 3 使用 Spring Security 6。旧的 WebSecurityConfigurerAdapter 配置方式已经不适合,需要迁移到 SecurityFilterChain Bean 方式。
6. Spring Boot 3升级后配置属性不生效怎么办?
可以临时使用:
spring-boot-properties-migrator
启动后查看日志提示,修改配置,完成后删除该依赖。(GitHub)
7. 升级后Maven报No compiler is provided怎么办?
通常是 Maven 使用了 JRE 或错误 JDK。
可以查看:
No compiler is provided in this environment解决办法
8. 升级后Unsupported class file major version 61是什么意思?
major version 61 对应 Java 17。说明当前运行或构建环境低于 JDK17,无法识别 Java 17 编译出的 class 文件。
9. 是否建议直接升级到JDK21?
老项目不建议一开始就同时升级到 JDK21。更稳的做法是先升级到 Spring Boot 3 + JDK17,稳定后再评估 JDK21。
10. Spring Boot 3升级需要改数据库吗?
通常不需要直接改数据库,但 JPA / Hibernate 行为变化可能影响 SQL、字段映射、懒加载、Dialect、自定义类型等。使用 JPA 的项目一定要做完整回归测试。
二十六、最终总结
Spring Boot 2 升级到 Spring Boot 3,核心变化有三件事:
1. Java 基线提升到 JDK17
2. Spring Framework 升级到 6
3. Java EE / javax 迁移到 Jakarta EE / jakarta
最稳升级路线:
Spring Boot 2.x -> 最新 2.7.x -> JDK17 -> Spring Boot 3.x -> jakarta迁移 -> 依赖兼容验证
重点检查:
JDK17
Maven / Gradle
javax -> jakarta
Spring Security 6
Hibernate 6
Spring Cloud
第三方Starter
自定义Starter
Docker / CI / 服务器JDK
配置属性变更
自动化测试
不要把它当成一次简单版本号升级。对真实项目来说,这更像一次 Java 后端基础栈升级。
二十七、相关文章
Spring Boot 与 JDK 版本兼容:
Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本?
JDK 下载地址:
各版本JDK镜像下载地址:JDK8 / JDK11 / JDK17 / JDK21 / JDK25 / JDK26 下载与IDEA配置指南
Windows 安装 JDK:
Windows安装JDK与JAVA_HOME环境变量配置教程
IDEA 配置 JDK:
Java class 版本对照:
Java版本号与class文件major version对照表
Maven 编译器错误:
No compiler is provided in this environment解决办法
Maven 国内镜像:
完整环境专题:
更新记录
2026-07-02:
- 创建 Spring Boot 2 升级 Spring Boot 3 完整指南
- 增加 JDK17 升级说明
- 增加 javax 到 jakarta 迁移示例
- 增加 Spring Security 6 配置迁移示例
- 增加 spring-boot-properties-migrator 使用说明
- 增加自定义 Starter 自动配置迁移说明
- 增加常见报错和排查清单
Spring Boot 2升级到Spring Boot 3完整指南:JDK17、javax迁移jakarta、依赖兼容与常见报错
https://java.li/archives/spring-boot-2-upgrade-to-3
评论