附录 C 通过 Spring Native 打包本地镜像
丁雪丰
在云原生应用越来越广泛的今天,大家对服务提出了很多新的要求。以前的服务只要跑起来,就长时间运行,启动慢一点、占用资源多一点都不是问题。在弹性伸缩,按量计费的云平台下,平时保持最小实例数,甚至 0 实例,请求到来后快速拉起一个新的服务实例,这就要求系统要能快速启动,必须是毫秒级;如果按 CPU 与内存的用量来计费,那服务占用的内存就要尽可能少,要在尽可能短的时间内达到性能峰值……
面对这些新挑战,Quarkus 和 Micronaut 这样的后起之秀 都能轻装上阵,直接面向云原生应用提供支持,而运行在传统 JVM 上的 Spring 系统多少有些力不从心,好在 Spring 家族也给出了自己的解决方案——Spring Native。
C.1 GraalVM 与 Spring Native
在开始介绍 Spring Native 之前,先让我们来了解一下 GraalVM,无论 Spring Native,还是 Quarkus,都需要依托于 GraalVM 来实现一些特定的功能。
C.1.1 GraalVM 简介
GraalVM 是 Oracle 开发的一款高性能 JDK 发行版 ,官网上罗列了它的几个重要特性。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
Spring Native 是一个工具,通过 GraalVM 实现高性能的 JDK 发行版,支持将 Spring 应用编译为本地镜像。该工具旨在解决 Spring Framework 中动态代理技术和类库的静态化问题,为云原生应用提供了一种解决方案。文章介绍了使用 Spring Native 将复杂的 Spring 工程编译为本地镜像的过程,包括调整依赖组件版本、代码调整和构建本地镜像。尽管 Spring Native 提供了便利,但将现有的 Spring 项目编译为本地镜像仍需调整依赖组件版本、代码,有时甚至需要放弃一些功能。文章还提到了构建本地镜像的过程中遇到的问题,以及针对这些问题的解决方案。此外,文章还介绍了在具体使用时的一些配置和调整,为读者提供了实际操作的参考。除此之外,文章还提到了一些优化方法,如使用 tomcat-embed-programmatic 代替 tomcat-embed-core 和 tomcat-embed-websocket,去除不必要的依赖等,以提高生成的本地镜像的性能和资源利用率。总的来说,Spring Native 为解决云原生应用中快速启动、资源占用少的需求提供了一种解决方案。文章最后还对比了使用本地镜像和传统的 Fat Jar 启动的性能差异,显示了 Spring Native 和 GraalVM 带来的性能提升。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
《学透 Spring:从入门到项目实战》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论