Spring Boot 2.7 升级 Spring Boot3.2.1 踩坑指南

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 文件配置,需要使用以下配置方式:

image-20231227091746731

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

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。

image-20231227092438029

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

实际运行效果

未升级之前

image-20231227085110128

升级后

image-20231227085138268

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

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/a305da8486.html