GraalVM 版本:graalvm-ce-JAVA17-22.3.0
SpringBoot3.0 中最重要的特性就是对 GraalVM 的支持,从而达到更快的启动速度,有两种使用方式。
因为需要利用 GraalVM 来打包可执行文件,所以需要你的机器上安装了 GraalVM。
新建一个 SpringBoot 3.0 的 Maven 工程,引入 parent、starter 依赖、以及两个重要的插件:
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
复制代码
然后执行:
mvn -Pnative clean native:compile
复制代码
需要花费一些时间...
执行完能看到 BUILD SUCCESS:
然后进入 target,就能看到一个 exe 文件:
我们可以直接运行该 exe 来启动我们的 SpringBoot 应用:
这样,我们就可以把这个可执行文件发送给另外的 windows 机器了,并且对方机器都不需要安装 JDK 就能运行我们的 SpringBoot 程序(亲自测过,确实能直接运行)。
不过大家应该发现了问题,在 windows 上编译出来的是 exe 文件,它是不能在 linux 上运行的,那么怎么办呢?
我们可以直接把 SpringBoot 应用对应的本地可执行文件构建为一个 Docker 镜像,这样就能跨操作系统运行了。
Buildpacks,类似 Dockerfile 的镜像构建技术
注意要安装 docker,并启动 docker
注意这种方式并不要求你机器上安装了 GraalVM,会由 SpringBoot 插件利用
/paketo-buildpacks/native-image 来生成本地可执行文件,然后打入到容器中
Docker 镜像名字中不能有大写字母,我们可以配置镜像的名字:
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.build-image.imageName>springboot3demo</spring-boot.build-image.imageName>
</properties>
复制代码
然后执行:
mvn -Pnative spring-boot:build-image
复制代码
来生成 Docker 镜像。
执行完之后,就能看到 docker 镜像了:
然后就可以运行容器了:
docker run --rm -p 8080:8080 springboot3demo
参考
https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html#native-image.developing-your-first-Application.native-build-tools
https://www.graalvm.org/22.2/reference-manual/native-image/guides/build-spring-boot-app-into-native-executable/