构建 Spring Native 下载慢

1,438 阅读2分钟

Spring 官方博客于2021年03月11日宣布 Spring Native 的 beta 版本发布,借助 Spring Native 可以将 spring 应用与 GraalVM 集成到native image中,这将大大提高应用启动速度,降低内存消耗。

我开始跟着这篇博客来学习Spring Native: Spring Native实战(畅快体验79毫秒启动springboot应用)

但是在构建镜像的时候遇到了问题,从报错信息看,是从 Github 下载包的时候异常了。 经验告诉我这个时候需要用梯子,但是这个包实在太大了,即使有梯子也很难下载下来,而且每次构建都要下载,那有没有加速下载的办法呢?

mvn clean -U -DskipTests spring-boot:build-image

image.png

在 Github 上找到这篇问答(How to download GraalVM faster?)上面有大佬指导了搭建本地下载服务,加速下载的方法。

方法如下:

  1. 下载构建需要的文件到本地 到 Release GraalVM Community Edition 21.1.0 下载四个文件:
graalvm-ce-java11-linux-amd64-21.1.0.tar.gz  
graalvm-ce-java11-linux-amd64-21.1.0.tar.gz.sha256  
native-image-installable-svm-java11-linux-amd64-21.1.0.jar  
native-image-installable-svm-java11-linux-amd64-21.1.0.jar.sha256  

2. 启动 Http 服务

python3 -m http.server

image.png

可以获取到文件的下载地址,例如我本地下载地址为:http://localhost:8000/Desktop/bindings/graalvm-ce-java11-linux-amd64-21.1.0.tar.gz

  1. 创建 binding 文件 image.png 接下来是最重要的一步,第 1 步下载的 4 个文件都是两两一对的,其中一个文件是 sha256校验码,现在要以校验码为文件名,下载路径为内容。 image.png image.png 完成后文件结构大概如下: image.png

  2. 构建镜像 由于要使用自建文件服务下载,而 maven 插件是固定的不能修改,所以需要使用 pack 工具自行构建镜像。 下载安装 pack 工具: Pack 执行构建命令:

pack build webmvc/native --path target/webmvc-1.0-SNAPSHOT.jar -e BP_NATIVE_IMAGE=true --volume "~/Desktop/bindings/graalvm:/platform/bindings/graalvm-deps"

参数说明:
webmvc/native 为目标镜像名称,可以自定义。
target/webmvc-1.0-SNAPSHOT.jar 为 jar 包路径
~/Desktop/bindings/graalvm:/platform/bindings/graalvm-deps 冒号前面是第3步的路径,冒号后面为固定路径不可改动。
注意:构建的花销比较大,docker 的配置调高一点,不然会花很长时间构建。

构建完成后,可以看到 docker 里多了一个镜像: image.png

  1. 运行
docker run --rm -p 8080:8080 webmvc/native

打开浏览器访问 8080 端口,确认服务是正常 image.png

可以看到启动时间只用了 0.051 秒 image.png 而直接运行启动时间需要 1.857 秒 image.png 用 docker stats 命令查看资源使用情况,可以看到内存仅用了不到 30M。 image.png