springboot 3.3版本 类数据共享(CDS)提升启动速度 使用方法+Docker打包代码

springboot 3.3 版本已经正式发布,新版本提供了类数据共享(CDS)功能,通过将类元数据缓存在 Archive(归档/存档) 文件中,使其可以快速预加载到新启动的 JVM 中,从而帮助缩短 JVM 的启动时间和内存占用。

闲话少说,直接体验。

使用springboot3.3创建项目(此处略)。

编译应用

我们先把应用打包成jar包:mvn clean package

此处假设打包出来的是service.jar

按照官方文档,我们需要将一体式jar包提取成可以使用CDS技术的格式,使用下面的命令:

bash 复制代码
java -Djarmode=tools -jar service.jar extract

执行后,目录就变成了 类似下面这样:

复制代码
service
    ├── service.jar
    ├── lib
    │   ├── ...
    │   ├── 应用的各种依赖包.jar
    │   ├── ...

这个结构启动方式略有变化,变成了执行 java -jar service/service.jar,这样就可以运行起来了。

生成CDS归档文件

根据官方说法,使用CDS和生成CDS的jdk版本,目录等最好一致,所以我们直接去后面要运行应用的容器中执行生成CDS存档的命令,这样就可以保证环境完全一致。

Dockerfile参考如下:

Dockerfile 复制代码
# 基础镜像自己选一个 我这里用了 zulujdk
FROM azul/zulu-openjdk:21.0.3
# 把刚才生成的应用的整个目录放进来
ADD service /opt/service

ENV TZ Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone
# 重点1: 预生成存档,参考 https://docs.spring.io/spring-framework/reference/integration/cds.html
RUN cd /opt/ && java -jar -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh service/service.jar
# 重点2: 运行时使用预生成的存档
ENTRYPOINT  ["java", "-jar", "-XX:SharedArchiveFile=application.jsa", "/opt/service/service.jar"]

经过上面的打包,运行时应用就会使用预先生成的类数据,不再需要重新加载,可以提升启动速度(实际效果自行体验哈)。

相关推荐
两点王爷10 分钟前
在离线的Ubuntu机器中安装docker
运维·docker·容器
Memory_荒年12 分钟前
别让用户“剁手”把你搞破产:接口幂等性与防重的终极防线
后端
Devin~Y16 分钟前
大厂Java面试实战:Spring Boot/WebFlux、Redis+Kafka、K8s可观测性与Spring AI RAG/Agent三轮连环问
java·spring boot·redis·kafka·kubernetes·resilience4j·spring webflux
掘金者阿豪19 分钟前
程序员必踩的一个坑:Codex 报错 Missing environment variable `OPENAI_API_KEY`,完整解决指南(附架构图)
后端
神奇小汤圆25 分钟前
从分析 Claude Code 源码到自己写一个:AnyCoder,支持 DeepSeek/Qwen 等任意大模型的开源 AI 编程 Agent
后端
悟空码字1 小时前
别再重复造轮子了!SpringBoot对接第三方系统模板,拿来即用
java·spring boot·后端
程序员cxuan1 小时前
为什么 Claude 要求实名认证?
人工智能·后端·程序员
Lsk_Smion1 小时前
Hot100(开刷) 之 环形链表(II)-- 随机链表的复制 -- 翻转二叉树
java·后端·kotlin·力扣·hot100
indexsunny1 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务架构解析
java·spring boot·redis·kafka·spring security·flyway·microservices
我叫张土豆1 小时前
让 AI 学会用工具:基于 LangChain4j 的 Skills Agent 全栈落地实战
人工智能·spring boot