【SpringBoot3】2、从SpringBoot2升级到SpringBoot3

从 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、版本升级

  1. 升级JDK版本

JDK版本需要 JDK17 或更高版本,不再支持 Java 8/11。

  • pom.xml 文件中 JDK 版本升级
xml 复制代码
<java.version>17</java.version>
  • Dockerfile文件中的基础镜像更换为:
bash 复制代码
# 基础镜像
FROM eclipse-temurin:17-jre
  1. 升级 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>
  1. 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>

如您在阅读中发现不足,欢迎留言!!!

相关推荐
Asurplus10 天前
【SpringBoot3】1、为什么选择SpringBoot3?
springboot3·aot·java17
九皇叔叔18 天前
004-SpringSecurity-Demo 拆分环境
java·springboot3·springsecurity
九皇叔叔18 天前
006-SpringSecurity-Demo 跨域(CORS)配置
java·springboot3·springsecurity·跨域·cors
码路星河2 个月前
SpringBoot3 + Sa-Token 双Token登录认证实战(避坑版)
sa-token·springboot3
易雪寒2 个月前
SpringBoot学习之Springboot3整合knife4j(五十三)
springboot3·knife4j
九皇叔叔3 个月前
【01】微服务系列之 Nacos 安装部署
微服务·云原生·nacos·架构·springboot3
九皇叔叔3 个月前
【01】SpringBoot3 MybatisPlus 工程创建
java·mybatis·springboot3·mybatis plus
WorldWelcome3 个月前
springboot3整合knife4j,并nginx映射到外网
nginx·springboot3·knife4j·jdk21
沉浮yu大海4 个月前
基于SpringBoot3+Java17+Nacos的配置中心和本地配置文件加解密
java·spring cloud·nacos·java17