在spring boot3中使用native image的最新方法
作者:flydean程序那些事 时间:2022-05-18 17:43:14
简介
在之前spring boot3文章中我们介绍了,spring boot3的一个重要特性就是支持把spring boot3的应用编译成为GraalVM的Native Image。
今天我们用具体的例子来给大家演示一下如何正确的将spring boot3的应用编译成为native image。
安装GraalVM
如果要把spring boot3的app编译成为native应用,需要GraalVM的支持。
什么是GraalVM呢?
从名字就可以看出来GraalVM是一个虚拟机,它的主要目标就是提升java应用程序的性能,并且消耗更少的资源。
它在java HotSpot JVM的基础上添加了JIT编译器和AOT来实现将应用编译成为本地可执行文件。除了java之外,GraalVM还支持JavaScript、Ruby、Python等多种编程语言。
所以,为什么要用GraalVM呢?一个字:快。
安装GraalVM也比较简单,我们进入它的官方下载页面下载对应的版本即可:https://www.oracle.com/downloads/graalvm-downloads.html。
GraalVM跟JDK一样也有两个版本,社区版和企业版本,大家可以根据需要自行选择。
要注意的是spring boot3需要GraalVM 22.3以上的版本支持,大家可不要下载错了。
下载完成之后,我们可以像正常安装JDK一样来安装GraalVM,这里以mac为例,假如我们安装的目录是/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0,那么我们需要配置对应的JAVA_HOME和PATH环境变量如下:
export PATH=/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0/Contents/Home/bin:$PATH
export JAVA_HOME=/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0/Contents/Home
export PATH=/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0/Contents/Home/bin:$PATH
export JAVA_HOME=/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0/Contents/Home
PATH中有一个非常重要的命令叫做gu,如果不添加PATH,那么在使用中就可能遇到下面的异常:
'gu' tool wasn't found. This probably means that JDK at isn't a GraalVM distribution.
安装完毕之后可以通过下面的命令来进行验证:
java -version
java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment GraalVM EE 22.3.0 (build 17.0.5+9-LTS-jvmci-22.3-b07)
Java HotSpot(TM) 64-Bit Server VM GraalVM EE 22.3.0 (build 17.0.5+9-LTS-jvmci-22.3-b07, mixed mode, sharing)
如果是在mac环境下,还需要执行下面的命令来解除对graalvm的隔离限制:
sudo xattr -r -d com.apple.quarantine /path/to/graalvm
否则在使用中就会遇到下面的问题:
添加Native Image支持
我们安装GraalVM的目的就是使用它的native Image特性。native image是一个单独的jar包,我们可以执行下面的命令来进行安装:
gu install native-image
其中gu就是/Library/Java/JavaVirtualMachines/graalvm-ee-java17-22.3.0/Contents/Home/bin中的命令。
下载的过程中还需要输入一个有效的邮件,并进行邮箱校验。然后一路ENTER就可以了。
当然,你还可以把Oracle GraalVM Enterprise Edition Native Image下载到本地,然后使用gu install -L来进行本地安装。
来源:https://www.cnblogs.com/flydean/p/17076848.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Unicode、UTF-8 和 ISO8859-1区别解析
SpringBoot打成war包在tomcat或wildfly下运行的方法
C#写入对象或集合类型数据到xml文件的方法
手把手教你搭建SpringMVC框架——最小化配置
详解Android使用@hide的API的方法
Quarkus中ConfigSourceInterceptor的加密配置实现
使用SpringBoot 配置Oracle和H2双数据源及问题
![](https://img.aspxhome.com/file/2023/7/64407_0s.png)
Java实现批量下载(打包成zip)的实现
基于SqlSessionFactory的openSession方法使用
![](https://img.aspxhome.com/file/2023/5/81195_0s.png)
Android版本更新实例详解
![](https://img.aspxhome.com/file/2023/1/85981_0s.png)
Java基于ArrayList实现群主发红包功能
![](https://img.aspxhome.com/file/2023/4/74914_0s.png)
Java NIO:浅析IO模型_动力节点Java学院整理
![](https://img.aspxhome.com/file/2023/8/65178_0s.png)
Java中tomcat memecached session 共享同步问题的解决办法
![](https://img.aspxhome.com/file/2023/9/78019_0s.png)
springboot 整合 seata的配置过程
![](https://img.aspxhome.com/file/2023/5/63735_0s.png)
SpringCloud远程服务调用三种方式及原理
![](https://img.aspxhome.com/file/2023/8/67438_0s.png)
JAVA JDK8 List分组的实现和用法
IDEA远程管理docker镜像及容器服务的实现
![](https://img.aspxhome.com/file/2023/9/63439_0s.png)
spring的xml文件打开没有namespace等操作选项的解决方案
![](https://img.aspxhome.com/file/2023/4/66514_0s.jpg)
java LRU(Least Recently Used )详解及实例代码
基于Java实现收发电子邮件功能
![](https://img.aspxhome.com/file/2023/7/80307_0s.png)