-
Spring Boot 2.x → 3.x 实战迁移
- 网站名称:Spring Boot 2.x → 3.x 实战迁移
- 网站分类:技术文章
- 收录时间:2025-09-14 16:08
- 网站地址:
“Spring Boot 2.x → 3.x 实战迁移” 网站介绍
Spring Boot 2.x → 3.x 实战迁移完整指南
Spring Boot 3.x 带来了 Spring Framework 6、Jakarta EE 9+、JDK 17+ 等一系列重大变化,这是一场“必经的迁移”。本文从 实战角度 出发,手把手带你完成一个 Spring Boot 2.x 项目升级到 3.x 的全过程:依赖变更、代码适配、潜在问题、最佳实践。
一、升级前准备 (Pre-Migration Checklist)
在开始之前,务必做好准备,这是成功升级的关键。
- 备份项目
使用 Git 管理代码,并确保当前工作区干净。升级建议新开分支,保留“安全网”。 - 检查当前版本
确认 Spring Boot 2.x 的具体版本(如 2.7.18)。建议先升级到该分支的最新版本,再跳到 3.x,减少跨度。 - 阅读官方文档(必读)
- Spring Boot 3.0 Migration Guide
- Spring Framework 6.0 Migration Guide
- Java 版本升级
Spring Boot 3.0 必须 使用 Java 17 或更高版本(推荐 21 LTS)。确保开发环境、CI/CD 和服务器环境统一。 - 第三方依赖检查
- 使用 ./mvnw dependency:tree 或 gradle dependencies 查看依赖树。
- 确认 MyBatis、Redis、Kafka、SpringDoc 等库是否有 Boot 3 兼容版本。
- MySQL 驱动需替换为 mysql-connector-j(旧的 mysql-connector-java 已废弃)。
- 自动化迁移工具(推荐)
引入 OpenRewrite,一键完成 javax.* → jakarta.*、属性改名等迁移:
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.29.0</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5</recipe>
</activeRecipes>
</configuration>
</plugin>
执行:
./mvnw -U rewrite:run
二、核心变更与实战修改步骤
1. 修改 POM.xml / build.gradle
Maven 示例:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.5</version> <!-- 当前稳定版本 -->
<relativePath/>
</parent>
<properties>
<java.version>17</java.version>
</properties>
关键变化:
- Jakarta EE:所有 javax.* 包 → jakarta.*
- MySQL 驱动:使用 mysql-connector-j
- SpringDoc OpenAPI:替换为 springdoc-openapi-starter-webmvc-ui:2.8.x
2. 代码修改:javax.* → jakarta.*
Spring Boot 3.x 核心变化:基于 Jakarta EE 9,命名空间全面迁移。
常见修改:
- Servlet: javax.servlet.* → jakarta.servlet.*
- JPA: javax.persistence.* → jakarta.persistence.*
- Validation: javax.validation.* → jakarta.validation.*
- 注解: javax.annotation.* → jakarta.annotation.*
示例:
// Boot 2.x
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
// Boot 3.x
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotNull;
3. Spring Security 6 配置变更
WebSecurityConfigurerAdapter 已移除,必须改为 SecurityFilterChain Bean。
旧写法 (Boot 2.x):
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated();
}
}
新写法 (Boot 3.x):
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(Customizer.withDefaults())
.build();
}
}
4. 配置文件变更
常见变化:
- server.max-http-header-size → server.max-http-request-header-size
- Spring MVC 默认 Path 匹配:PathPatternParser 替代 AntPathMatcher
- Spring Sleuth 已废弃 → 使用 Micrometer Tracing
运行以下命令,自动检查配置差异:
./mvnw spring-boot:validate -Dspring-boot.version=3.5.5
5. 第三方库适配
- SpringDoc OpenAPI:升级到 2.8.x
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.11</version>
</dependency>
- MySQL 驱动:mysql-connector-j
- Lombok:升级到 1.18.24+
- 测试依赖:升级到 Boot 3.x 的 spring-boot-starter-test
三、常见问题与解决方案 (Q&A)
- ClassNotFoundException / NoSuchMethodError
- 原因:依赖冲突或旧库混入
- 解决:mvn dependency:tree,排除旧版本
- 找不到 javax 类
- 原因:Hibernate 或 Validator 版本过旧
- 解决:确保使用 Boot 管理的版本,移除手动声明的旧依赖
- Spring Security 报错
- 原因:WebSecurityConfigurerAdapter 已移除
- 解决:使用 SecurityFilterChain Bean 重写
- 配置属性不生效
- 原因:配置已重命名或废弃
- 解决:对照官方迁移指南或用 spring-boot:validate
- 链路追踪失效
- 原因:Spring Sleuth 已废弃
- 解决:切换到 Micrometer Tracing + OpenTelemetry/Zipkin
四、升级后验证
- 编译通过:确保编译成功,无 javax.*
- 接口测试:访问 /actuator/health
- 安全验证:测试登录、权限校验
- 数据库操作:验证 JPA/MyBatis 正常
- 监控与日志:确认 Micrometer 指标和链路追踪是否正常
五、加分项:AOT & Native Image
Spring Boot 3.x 原生支持 GraalVM Native Image,可构建更快启动、低内存占用的二进制应用。
构建命令:
./mvnw -Pnative spring-boot:build-image
适合边车服务、Serverless、微服务网关等场景。
六、总结
Spring Boot 2.x → 3.x 升级核心任务:
- 环境:JDK ≥ 17
- Jakarta 命名空间:全局替换 javax → jakarta
- 依赖对齐:BOM 管理三方库,替换过期依赖(如 MySQL 驱动)
- 配置更新:关注属性改名、PathPattern、监控链路
- 安全配置重写:用 SecurityFilterChain 取代 WebSecurityConfigurerAdapter
建议 在独立分支逐步升级,借助 OpenRewrite 自动迁移,再通过 回归测试与监控验证,确保平滑过渡。
更多相关网站
- 高效使用Java构建工具,Maven篇|云效工程师指北
- CBN丨China's consumer prices hold steady in November
- Token、Session、Cookie、JWT、OAuth2:一文给你彻底讲透!
- 胆小的跳蛛利用天敌蚂蚁作保镖逃离毒蜘蛛追杀
- Spring Boot 私有文件保护:签名 URL + 权限控制 + 限流一体化方案
- Spring Boot 企业级应用与微服务实战指南
- React 19 + React-Router v7 超级详细实用、好理解的优雅动态路由懒加
- Alibaba Leads $60 Million Series B Round in AI Video Startup AISphere
- 基于 Vue3+Vite+Antd 企业级中后台管理
- Maven 使用说明和配置_maven配置详解
- AI Agents Could Replace Apps Entirely, Says Ant Group CEO
- Shanghai blockchain park proves WAIC's worth
- 数据治理(十二):Ranger2.1.0 源码编译
- CBN丨China pledges expanded market access for foreign investors
- vue-antd后台管理系统_vue ant
- Conference on the Bund: young innovators shine as China's next tech generation
- JD.com Drives Robotics Funding Frenzy With Investments in LimX Dynamics, Spirit AI, and EngineAI
- Remarks by H.E. Xi Jinping
- 最近发表
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 梦幻诛仙表情包 (36)
- java面试宝典2019pdf (26)
- disk++ (30)
- 加密与解密第四版pdf (29)
- iteye (26)
- centos7.4下载 (32)
- intouch2014r2sp1永久授权 (33)
- jdk1.8.0_191下载 (27)
- axure9注册码 (30)
- 兔兔工程量计算软件下载 (27)
- ccproxy破解版 (31)
- aida64模板 (28)
- engine=innodb (33)
- shiro jwt (28)
- segoe ui是什么字体 (27)
- head first java电子版 (32)
- clickhouse中文文档 (28)
- jdk-8u181-linux-x64.tar.gz (32)
- 计算机网络自顶向下pdf (34)
- -dfile.encoding=utf-8 (33)
- jdk1.9下载 (32)