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
- 复制代码
顺便记录一下相关教程: