在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
猜你喜欢
- Sequence序列Sequence 是Kotlin标准库提供的一种容器类型。它和Iterable一样具备对集合进行多步骤操作能力,但是却是
- SpringBoot @NotBlank错误java 验证出现如下错误:javax.validation.UnexpectedTypeExc
- 一、水平分表当业务需求的数据量过大时,一个表格存储数据会非常之多,故时长采用水平分表的方式来减少每张表的数据量即是提升查询数据库时的效率。水
- 前言EasyCache升级兼容 Springboot2,有个业务系统启动总是会卡住,最后抛出超时异常,如下:java.util.concur
- ImageCacheconst int _kDefaultSize = 1000;const int _kDefaultSizeBytes
- 本文实例讲述了Java设计模式之工厂模式实现方法。分享给大家供大家参考,具体如下:工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体
- 目录一 . 前言二 . 流程梳理2.1 实例化创建2.1.1 doGetBean 入口2.1.2 doGetBean 补充节点2.1.3 A
- 先吐槽一下,现在的Bean Searcher操作手册的指引弱的可怜…对我这样的小白及其不友好话不多说直入主题1、首先肯
- 本文实例为大家分享了Java实现发送邮件并携带附件的具体代码,供大家参考,具体内容如下一、 邮件服务器与传输协议要在网络上实现邮件功能,必须
- 在上篇文章给大家介绍了Mybatis中#{}和${}传参的区别及#和$的区别小结,如果大家有需要可以参考下。$和#简单说明:#相当于对数据
- 第1部分 HashMap介绍HashMap简介HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap
- 本文实例为大家分享了Swing拆分窗格控件JSplitPane的使用方法,供大家参考,具体内容如下package day1115;impor
- LINQ查询表达式的基本语法很容易掌握,它使用C#常见的语言构造,从外观上看,和我们常用的SQL类似,并且查询表达式中的变量可以用匿名类型,
- 1、异常分类通常分为三类:系统异常(SystemException),业务异常(BusinessException)和其他异常(Except
- Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr
- 目录注解是什么?元注解是什么?标准的元注解:@Target元注解:@Retention元注解:@Documented元注解:@Inherit
- 尝试了各种防止中文乱码的方式,但是还是乱码;最后还是细节问题导致;解决方式:以及俩种方式是百度的,我的问题不是这俩块1.在requestMa
- 一、前期准备提示:如果友友你没有看过系列一的文章点击这个链接:王者荣耀中一个英雄是怎么被产生的?(一)我们现在功能比较多,所有为了让程序运行
- 01.点明观点 C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确
- 前言因为工作原因,需要在项目中集成dubbo,所以去查询dubbo相关文档,发现dubbo目前已经不更新了,所以把目光投向了dubbox,d