◀返回
從 Spring Boot 應用程式建置原生可執行檔
GraalVM Native Image 可以顯著提升 Spring Boot 應用程式的效能。 Spring Boot 3 已整合 GraalVM Native Image 的支援,讓設定和配置專案更加容易。
本指南示範如何從 Spring Boot 3 應用程式建置原生可執行檔。
建立應用程式
在示範部分,您將建立一個簡單的 REST 伺服器 Java 應用程式。
-
前往 Spring Initializr 並建立一個新的 Spring Boot 專案。請務必加入 GraalVM Native Support 和 Spring Web 依賴項目。
-
按一下 GENERATE 以建立並下載專案為 .zip 檔案。解壓縮檔案並在您慣用的 IDE 中開啟它。
專案配置已包含所有必要的依賴項目和外掛程式,包括 Native Build Tools。 例如,如果您建立的是 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 支援使用 Paketo Buildpack for Oracle 建置包含原生可執行檔的容器映像,該建置組件提供 GraalVM Native Image。
必要條件
請確定您已安裝並執行 Docker API 相容的容器執行階段,例如 Rancher Desktop 或 Docker。
-
首先,啟用 Paketo Buildpack for Oracle,要求使用 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
時,建置組件會下載包含 Native Image 的 Oracle GraalVM。
- Maven。 開啟 pom.xml 檔案,找到
- 使用建置組件建置此 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 文件提供數個範例,示範如何使用建置組件建置具有 GraalVM Native Image 的應用程式。
使用 Native Build Tools 建置原生可執行檔
如果您不想使用 Docker 並在主機上建立原生可執行檔,請使用 Native Build Tools,它會提供 Maven 和 Gradle 外掛程式來建置原生映像。
必要條件
請確定您已安裝 GraalVM JDK。最簡單的入門方式是使用 SDKMAN!
sdk install java 21.0.4-graal
將 21.0.4
替代為慣用的 GraalVM 版本或搶先體驗版本。如需其他安裝選項,請瀏覽下載區段。
- 使用 Native Build Tools 建置原生可執行檔
- 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 在容器環境中執行此操作,或使用 Native Build Tools 在主機上執行此操作。
預先編譯成原生可執行檔的 Spring Boot 應用程式不僅更快、更輕巧,而且效率更高,尤其是在資源受限的環境中,例如雲端平台或容器。