◀返回
从 Spring Boot 应用程序构建本地可执行文件
GraalVM Native Image 可以显著提高 Spring Boot 应用程序的性能。Spring Boot 3 集成了对 GraalVM Native Image 的支持,使其更易于设置和配置项目。
本指南演示如何从 Spring Boot 3 应用程序构建本地可执行文件。
创建应用程序
在演示部分,您将创建一个简单的 REST 服务器 Java 应用程序。
-
转到 Spring Initializr 并创建一个新的 Spring Boot 项目。确保添加 **GraalVM 本地支持** 和 **Spring Web** 依赖项。
-
单击生成以创建并下载项目为 .zip 文件。解压缩文件并在您喜欢的 IDE 中打开它。
项目配置已经包含所有必要的依赖项和插件,包括 本地构建工具。例如,如果您创建了一个 Maven 项目,这些是在 pom.xml 文件中添加的必需插件
<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>
- 主应用程序类由初始化程序创建。在同一个目录中,在一个名为 HelloController.java 的文件中创建一个 REST 控制器,其内容如下
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, GraalVM!"; } }
- (可选) 打包并在 Java HotSpot 虚拟机上运行应用程序。
Maven./mvnw spring-boot:run
Gradle
./gradlew bootRun
它编译应用程序,创建 JAR 文件,并运行应用程序。
应用程序在数百毫秒内启动。打开浏览器并导航到 localhost:8080/hello 以查看应用程序正在运行。您应该看到“Hello, GraalVM!”。
使用 Paketo Buildpacks 构建本地可执行文件
Spring Boot 支持使用 Oracle 的 Paketo Buildpack 构建包含本地可执行文件的容器镜像,该镜像提供 GraalVM Native Image。
先决条件
确保您安装了 Docker-API 兼容的容器运行时,例如 Rancher Desktop 或 Docker,并且正在运行。
-
首先,启用 Oracle 的 Paketo Buildpack,请求 Native Image 工具。
- Maven。打开 pom.xml 文件,找到
spring-boot-maven-plugin
声明,并更改它,使其看起来像这样<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>paketobuildpacks/builder-jammy-buildpackless-tiny</builder><!--required for AArch64/M1 support --> <buildpacks> <buildpack>paketobuildpacks/oracle</buildpack> <buildpack>paketobuildpacks/java-native-image</buildpack> </buildpacks> </image> </configuration> </plugin>
您还应该确保您的 pom.xml 文件使用
spring-boot-starter-parent
。<parent>
部分应该由初始化程序添加。 - Gradle。打开 build.gradle 文件,并添加以下行
bootBuildImage { builder = "paketobuildpacks/builder-jammy-buildpackless-tiny" buildpacks = ["paketobuildpacks/oracle", "paketobuildpacks/java-native-image"] }
当请求
java-native-image
时,buildpack 会下载 Oracle GraalVM,其中包括 Native Image。
- Maven。打开 pom.xml 文件,找到
- 使用 buildpack 为此 Spring 应用程序构建本地可执行文件
- Maven
./mvnw -Pnative spring-boot:build-image
- Gradle
./gradlew bootBuildImage
- Maven
- 构建完成后,Docker 镜像应该可用。您可以使用
docker run
启动您的应用程序。例如docker run --rm -p 8080:8080 docker.io/library/demo:0.0.1-SNAPSHOT
Paketo 文档提供了几个示例,展示了如何使用 buildpack 使用 GraalVM Native Image 构建应用程序。
使用本地构建工具构建本地可执行文件
如果您不想使用 Docker 并在主机上创建本地可执行文件,请使用 本地构建工具,它提供 Maven 和 Gradle 插件用于构建本地镜像。
先决条件
确保您已安装 GraalVM JDK。最简单的入门方法是使用 SDKMAN!
sdk install java 21.0.4-graal
用您喜欢的 GraalVM 版本或早期访问版本替换 21.0.4
。有关其他安装选项,请访问 下载部分。
- 使用本地构建工具构建本地可执行文件
- Maven
./mvnw -Pnative native:compile
该命令编译项目并在 target/ 目录中创建一个本地可执行文件
demo
。 - Gradle
./gradlew nativeCompile
该命令编译项目并在 build/native/nativeCompile/ 目录中创建一个本地可执行文件
demo
。
- Maven
- 从本地可执行文件运行应用程序
- Maven
./target/demo
- Gradle
./build/native/nativeCompile/demo
使用 Gradle,您还可以执行
nativeRun
任务:gradle nativeRun
。如果您之前在 HotSpot 上运行过此应用程序,您会注意到启动时间显著减少。
- Maven
本指南演示了如何为 Spring Boot 应用程序创建本地可执行文件。您可以在容器环境中使用 Paketo Buildpacks,或在主机上使用本地构建工具来执行此操作。
Spring Boot 应用程序在提前编译为本地可执行文件时,不仅速度更快、更轻巧,而且效率更高,尤其是在云平台或容器等资源受限的环境中。