GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动 |
您所在的位置:网站首页 › customcast下载官网 › GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动 |
简介
GraalVM是高性能的JDK,支持Java/Python/JavaScript等语言。它可以让Java变成二进制文件来执行,让程序在任何地方运行更快。这或许是Java与Go的一场战争? 首先到官网下载,我是直接到GitHub Release Page下载的,请下载对应的系统包,我下载如下: graalvm-ce-java11-darwin-amd64-22.3.0.tar.gz 下载后解压到某个目录,我的如下: /Users/larry/Software/graalvm-ce-java11-22.3.0 接着测试对应的程序是否可以正常执行,如java --version。在Mac上会报错如下: is damaged and can’t be opened.。 所以需要执行下面语句: $ sudo xattr -r -d com.apple.quarantine /Users/larry/Software/graalvm-ce-java11-22.3.0注意修改对应的目录。 然后就可以执行了: $ ./java --version openjdk 11.0.17 2022-10-18 OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 11.0.17+8-jvmci-22.3-b08) OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 11.0.17+8-jvmci-22.3-b08, mixed mode, sharing) 安装native-image这个工具用来把Java程序转化为本地二进制包,安装如下: $ ./gu install native-image Downloading: Component catalog from www.graalvm.org Processing Component: Native Image Downloading: Component native-image: Native Image from github.com Installing new component: Native Image (org.graalvm.native-image, version 22.3.0) 配置环境 配置环境变量因为这个GraalVM还不够成熟,我不想一直使用,就通过一个命令来切换,配置如下: export GraalVM_HOME=/Users/larry/Software/graalvm-ce-java11-22.3.0/Contents/Home alias switchOnGraalVM='export PATH=$GraalVM_HOME:$PATH' alias switchOnGraalVMJavaHome='export JAVA_HOME=/Users/larry/Software/graalvm-ce-java11-22.3.0/Contents/Home' alias switchOffGraalVM='export PATH=`echo $PATH | tr ":" "\n" | grep -v "graalvm" | tr "\n" ":"`' alias switchOffGraalVMJavaHome='export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home' 配置IDEA可以在IDEA上配置对应的JDK,这样开发的时候可以使用: 新来创建一个普通的Spring Boot Web程序,主要Java代码如下: @SpringBootApplication @RestController @RequestMapping("/") public class SpringbootNativeGraalVMMain { public static void main(String[] args) { SpringApplication.run(SpringbootNativeGraalVMMain.class, args); } @GetMapping("/hi-graalvm") public String hi() { return "This message is from Spring Boot built/run by GraalVM/Spring Native"; } }启动时长为1.193秒,还不错。我电脑还不错。 添加依赖: org.springframework.experimental spring-native ${spring-native.version}添加插件,这个插件非常重要,不然会有各种错误: org.springframework.experimental spring-aot-maven-plugin 0.11.5 test-generate test-generate generate generate添加以下插件来打包生成可执行程序: native exec 0.9.11 org.junit.platform junit-platform-launcher test org.graalvm.buildtools native-maven-plugin ${native-buildtools.version} true test-native test test build-native package build然后通过以下命令来build包,时间会长很多,因为要转化为二进制可执行文件: $ mvn clean package -Pnative两分多钟后完成,生成了一个可执行文件,执行如下: $ target/spring-boot-native-graalvm结果只花了0.066秒,即66毫秒就可以了,这也太快了吧。 访问接口也是正常的: 先启动本地的Docker,然后添加依赖如下: org.springframework.boot spring-boot-maven-plugin ${repackage.classifier} paketobuildpacks/builder:tiny true通过以下命令打出Docker镜像: mvn spring-boot:build-image可能会花费很长时间,需要下载一些工具与镜像。 打包成功后,多了镜像: $ docker images | grep graalvm spring-boot-native-graalvm 1.0-SNAPSHOT d2c8d5c52a3c 42 years ago 85.8MB启动如下: $ docker run --rm spring-boot-native-graalvm:1.0-SNAPSHOT -p 8080:8080启动时间为59ms,更短了。 注意 直接通过native-image命令来将jar包转化为可执行文件,如遇到各种问题,劝大家放弃尝试,这也是Spring Native存在的价值。别问我为什么知道,哈哈~~ 要注意切换对应的Java程序和Java Home,不然build包会报错。 看Spring Native的包名是experimental的,离生产应该还有距离,不要轻易在生产上用。 代码代码请看GitHub: https://github.com/LarryDpk/pkslow-samples References: Quick Start Guide GraalVM Quick Reference GraalVM Native Image Quick Reference v1 向云原生靠近 | 体验 GraalVM 静态编译字节码,尝试 “超声波 Java” - Quarkus |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |