Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南
作者:mmseoamin日期:2024-02-24

Spring Boot 升级 3.2.1 踩坑指南

原服务器上的 Java Spring Boot 程序内存占用很高,服务器资源紧张,考虑使用高版本 JDK 21,并使用虚拟线程等进行优化。

Spring Boot 源版本: 2.7.4

javax 系列依赖弃用

下面大致罗列了一些需要替换的依赖

import javax.validation.constraints.NotBlank;
替换为
import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
替换为
import jakarta.validation.constraints.Pattern;
import javax.annotation.Resource;
替换为
import jakarta.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
替换为
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid;
替换为
import jakarta.validation.Valid;

邮件相关依赖替换


    jakarta.mail
    mail
    1.4.7



    com.sun.mail
    jakarta.mail
    2.0.1

Servlet 依赖


    javax.servlet
    javax.servlet-api
    compile

替换为


    jakarta.servlet
    jakarta.servlet-api
    6.0.0
    compile

Swagger 升级

之前使用的是 Knife4j,依赖了 Springfox 3.0.0,而 Springfox 3.0.0 不再更新,需要替换为 OpenAPI 3。响应代码的注解最好替换一下


    com.github.xiaoymin
    knife4j-openapi3-jakarta-spring-boot-starter
    4.4.0


    io.swagger.core.v3
    swagger-annotations
    2.2.8

使用到注解的情况下排除一下之前 Swagger 的依赖,要不然不好替换原来的注解


    com.github.xiaoymin
    knife4j-annotations
    ${knife4j.version}
    
        
            io.swagger
            swagger-annotations
        
        
            swagger-annotations
            io.swagger.core.v3
        
    

注解替换参考这个 示例

配置文件修改

springdoc:
  swagger-ui:
    path: /swagger-ui.html
  api-docs:
    path: /v3/api-docs
knife4j:
  enable: true
  setting:
    language: zh_cn

替换的注解

@ApiModel(value = "商品规格")
替换为
@Schema(description = "商品规格")
  
@ApiModelProperty(value = "删除状态")
  替换为
 @Schema(description = "删除状态")
  
@Api(tags = "App支付接口")
    替换为
@Tag(name = "App支付接口")
  
  
@ApiOperation(value = "添加接口")
  替换为
@Operation(summary ="添加接口")

注解到底能不能复用,没有测试过,我的做法是直接替换

第三方依赖升级

我们服务依赖的第三方依赖相对较少,基本依赖版本升级到 Spring Boot 3.2 就可以使用。

  • Spring Cloud 版本升级
    
        2023.0.0
    
    
    • Forest 升级
      
          1.5.35
      
      
      
          com.dtflys.forest
          forest-spring-boot3-starter
          ${forest-spring-boot-starter.version}
      
      
      • Mica 升级
        3.2.0
        
        • Sa-Token 升级

          Stoke 升级后可能有点 API 的变动,稍微改动下就行,

          1.37.0
          
                  
                      cn.dev33
                      sa-token-spring-boot3-starter
                      ${sa-token.version}
                  
          

          MyBatis-Plus 升级

          3.5.5
          

          MyBatis-Plus 升级

          3.5.5
          
                  
                      com.baomidou
                      mybatis-plus-spring-boot3-starter
                      ${mybatis-plus.version}
                  
          

          Spring Boot 配置变动

          自动配置修改

          Spring Boot 3.0 之后已经弃用了 spring.factories 文件配置,需要使用以下配置方式:

          Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南,image-20231227091746731,第1张

          目录如下,内容可以参考网上教程,这儿提一个自动生成配置的依赖:

          META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
          
          
              net.dreamlu
              mica-auto
              3.1.2
          
          

          Redis 配置修改

          spring:
            data:
              redis:
                database: 3
                host:  ${REDIS_HOST:127.0.0.1}
                port: ${REDIS_PORT:3306}
                password: ${REDIS_PASSWORD:123456}
          

          Redis 的配置需要添加到 spring.data 之下,要不然不生效。

          虚拟线程修改

          spring:
            threads:
              virtual:
                enabled: true
          

          Docker 镜像选择

          可以自动打 Docker 镜像,我懒,直接找 OpenJDK,我就找了 eclipse-temurin。

          Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南,image-20231227092438029,第2张

          # Maven 选择
          maven:3.9.6-eclipse-temurin-21-alpine
          # JVM 运行镜像选择
          eclipse-temurin:21.0.1_12-jre
          

          实际运行效果

          未升级之前

          Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南,image-20231227085110128,第3张

          升级后

          Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南,image-20231227085138268,第4张

          因为是测试环境,晚上的运行结果,没有什么流量,单纯看效果还行,从 1.5GB 多降低到 800 多MB。