原服务器上的 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。