原服务器上的 Java Spring Boot 程序内存占用很高,服务器资源紧张,考虑使用高版本 JDK 21,并使用虚拟线程等进行优化。
Spring Boot 源版本: 2.7.4
下面大致罗列了一些需要替换的依赖
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 1.4.7 
com.sun.mail jakarta.mail 2.0.1 
javax.servlet javax.servlet-api compile 
替换为
jakarta.servlet jakarta.servlet-api 6.0.0 compile 
之前使用的是 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 就可以使用。
2023.0.0 
1.5.35 
com.dtflys.forest forest-spring-boot3-starter ${forest-spring-boot-starter.version} 
3.2.0 
Stoke 升级后可能有点 API 的变动,稍微改动下就行,
1.37.0 
cn.dev33 sa-token-spring-boot3-starter ${sa-token.version} 
3.5.5 
3.5.5 
com.baomidou mybatis-plus-spring-boot3-starter ${mybatis-plus.version} 
Spring Boot 3.0 之后已经弃用了 spring.factories 文件配置,需要使用以下配置方式:

目录如下,内容可以参考网上教程,这儿提一个自动生成配置的依赖:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
net.dreamlu mica-auto 3.1.2 
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 镜像,我懒,直接找 OpenJDK,我就找了 eclipse-temurin。

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

升级后

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