Spring Native的使用

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2021/03/17/spring-native-way/



Spring Native本质上其实是依赖于GraalVM的native image功能,所以要先安装相关依赖。

安装graalvm

MacOS的安装依赖brew,官方有一个tap。

brew install --cask graalvm/tap/graalvm-ce-lts-java11

安装以后使用gu工具安装native-image工具

gu install native-image

SpringNative构建

首先进行的是AOT插件,插件会根据上下文进行一些优化,主要是为了增强native image的兼容性。

其次会进行jar包构建,构建后的jar包也是可以在JVM环境下正常运行。

最后就是build-image这一步,其实启用native与否的关键主要在buildpacks上。首先会自动探测需要应用的buildpacks。如果系统变量BP_NATIVE_IMAGE是true的话就会激活paketo-buildpacks/native-image

这个插件的native目录包含了对应的GO文件,会调用native-image进行生成操作。生成后会放入image中。

构建本身还是比较快的。

出错情况

最常见的出错就是native-image没有安装或者没有使用graalvm,一般提示native-image找不到。

目前spring-native要求GraalVM 21.0.0,版本如果低了可能有部分参数不支持,比InlineBeforeAnalysis等。

可以通过BP_NATIVE_IMAGE_BUILD_ARGUMENTS指定一些特殊参数,常见的如下:

  • --verbose
  • -H:+PrintAnalysisCallTree
  • -H:+TraceClassInitialization
  • -H:+ReportExceptionStackTraces
  • --enable-all-security-services


本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2021/03/17/spring-native-way/

发表评论