Spring
团队致力于为Spring
应用程序提供原生映像支持已经有一段时间了。在SpringBoo2.x
的Spring Native
实验项目中酝酿了3年多之后,随着Spring Framework 6
和Spring Boot 3
的发布,对应的项目就是Spring Native
,原生镜像支持将会发布GA
版本(换言之就是,Native Image
相关支持会在Spring Boot 3
的GA
版本中一起发布)。
前面这一段简介摘抄自参考资料中的《Native Support in Spring Boot 3.0.0-M5》
笔者在写这篇文章(2022-10-28
)前后SpringBoot
尚未发布3.x GA
,版本3.0.0-M5+
算是GA
前相对稳定的版本,这里选用当前3.x
的最新非GA
版本3.0.0-RC1
进行调研。
什么是Native Image#
Native Image
,这里直译为原生镜像或者本地镜像,是一种提前将(Java
)代码编译为二进制文件(原生可执行文件,native executable
)的技术。原生可执行文件只包含运行时所需要的代码,即应用程序类、标准库类、语言运行时和来自JDK
的静态链接的原生代码(也就是这样的二进制文件可以直接运行,不需要额外安装JDK
)。由原生镜像生成的可执行文件有几个重要的优点:
- 使用
Java
虚拟机所需资源的一小部分,因此运行成本更低 - 启动时间大幅度下降,以毫秒为单位
- 不需要进行预热即可提供最佳性能
- 可以打包到轻量级容器映像中以便快速有效地部署
- 减少了攻击面(这个和网络安全相关)
Spring Boot 3
中使用GraalVM
方案提供Native Image
支持。
安装GraalVM#
在https://www.graalvm.org/downloads - Download GraalVM页面中下载对应操作系统的GraalVM
: