从 Spring Boot 2 升级到 Spring Boot 3 是一次重大迁移,涉及底层 Jakarta EE、Java 版本和核心框架的全面更迭,工作量较大,需要谨慎规划。
以下是核心的升级要点概览:
| 变更领域 | 核心变更内容 | 迁移关键动作 |
|---|---|---|
| 变更领域 | 核心变更内容 | 迁移关键动作 |
| 基础环境 | 要求 Java 17 或更高版本,不再支持 Java 8/11。 | 安装并配置 JDK 17,确保开发与部署环境一致。 |
| 核心依赖 | Jakarta EE 9+ 取代 javax;Spring 升级至 6.x;Hibernate 升级至 6.x。 | 批量替换所有 javax.* 包名为 jakarta.*。 |
| 配置文件 | 多个配置键名被修改或废弃(如 spring.redis 移至 spring.data.redis)。 | 检查并更新所有 application.properties/yml 中的配置项。 |
| Spring Security | 废弃 WebSecurityConfigurerAdapter,采用基于组件的安全配置链。 | 重写所有安全配置类,使用 SecurityFilterChain Bean。 |
| 第三方库 | 许多库需要升级到支持 Boot 3 的版本(如 SpringDoc、Swagger 等)。 | 检查并升级所有第三方依赖,移除不兼容的库(如 Springfox)。 |
1、版本升级
- 升级JDK版本
JDK版本需要 JDK17 或更高版本,不再支持 Java 8/11。
- pom.xml 文件中 JDK 版本升级
xml
<java.version>17</java.version>
- Dockerfile文件中的基础镜像更换为:
bash
# 基础镜像
FROM eclipse-temurin:17-jre
- 升级 SpringBoot 版本
官方建议,在尝试升级到 Spring Boot 3 之前,请确保你的应用当前版本是 Spring Boot 2.7.x。这会大大减少升级过程中遇到的问题。
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.5.11</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- maven编译插件升级
xml
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
2、包名替换
Jakarta EE 9+ 取代 javax,需要批量替换所有 javax.* 包名为 jakarta.*。例如:
- javax.servlet.http.HttpServletRequest → jakarta.servlet.http.HttpServletRequest
- javax.persistence.Entity → jakarta.persistence.Entity
- javax.validation.Valid → jakarta.validation.Valid
3、其他 API 变更
- Hibernate 6.x:如果你的代码中直接使用了 Hibernate 的 API,需要注意其对查询语法和主键生成器的改动。
- Spring Security:这是最容易出错的地方。需要彻底重写安全配置,移除过时的 WebSecurityConfigurerAdapter,转而使用 @Bean 定义 SecurityFilterChain。
- 配置属性:很多配置项的 Key 发生了变化。官方提供了一个临时的依赖 spring-boot-properties-migrator,将其加入项目后,启动时会在日志中打印出所有需要迁移的配置项和推荐的新 Key,非常实用。
4、配置文件变更
Redis 配置变更
yml
spring:
data:
# Redis配置
redis:
host: 42.193.241.38
port: 6379
password: V33h14uiKfUrAv3K
database: 0
timeout: 5000
# 连接池
lettuce:
pool:
# 开启连接池
enabled: true
# 连接池中的最大空闲连接数
max-idle: 8
# 连接池中的最小空闲连接数
min-idle: 0
# 连接池最大连接数(使用负值表示没有限制)
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
从 spring.redis 变更为 spring.data.redis
5、升级第三方库
- MyBatis-Plus
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
</dependency>
- 动态数据源
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
</dependency>
- Druid
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
</dependency>
- Swagger-annotations
xml
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations-jakarta</artifactId>
</dependency>
- SpringDoc-OpenApi
xml
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
- Sa-Token
xml
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
</dependency>
如您在阅读中发现不足,欢迎留言!!!