知識庫 / Spring RSS 訂閱

使用 Spring Native 和 Liberica 工具構建原生鏡像及速度對比

Docker,Spring
HongKong
2
12:03 PM · Dec 06 ,2025

1. 概述

隨着微服務架構的普及,龐大的單體應用正逐漸被淘汰。Java 也在不斷髮展,以適應現代需求。例如,Oracle、Red Hat、BellSoft 等貢獻者積極開發 GraalVM 項目。此外,微服務特定的框架 Quarkus 去年發佈。對於 Spring Boot 而言,VMware 正在為 Spring Native 項目投入兩年的精力。

因此,得益於 VMware 和 BellSoft 的合作,Spring Native 成為了端到端的原生鏡像解決方案,包括 Liberica Native Image Kit,該工具基於 GraalVM 的源代碼。Spring Native 和 Liberica NIK 允許開發者創建 Spring Boot 應用的原生可執行文件,從而優化資源消耗並最大限度地減少啓動時間。

在本教程中,我們將探索如何使用原生鏡像技術與 Spring Boot 應用一起使用,通過構建和運行同一應用的三種方式——作為經典 JAR 文件;作為 Liberica JDK 和 Spring Native 的原生鏡像容器;以及作為 Liberica Native Image Kit 的原生鏡像。然後我們將比較它們的啓動速度。在每種情況下,我們將使用 Spring Native 項目中的 petclinic JDBC 應用作為示例。

2. Liberica JDK 安裝

首先,安裝適用於您系統的 Java 運行時環境。 您可以訪問 Liberica JDK 下載頁面 並選擇適合我們平台的版本。 我們將使用 JDK 11,即 x86 Linux 標準 JDK 包。

安裝 Liberica JDK 有兩種方法。 一種是通過包管理器或下載 .tar.gz 包 (或在 Windows 上下載 .zip 包)。

後一種方法更高級,但請放心,它只需要四個步驟。 首先,我們需要更改到您希望安裝的目錄:

cd directory_path_name
<p>無需離開目錄,我們可以運行:</p>
wget https://download.bell-sw.com/java/11.0.14.1+1/bellsoft-jdk11.0.14.1+1-linux-amd64.tar.gz

如果本地沒有 wget 命令,可以通過 brew install wget 安裝 (適用於 Linux 和 Mac)。

這樣,運行文件將被解壓到當前目錄:

tar -zxvf bellsoft-jdk11.0.14.1+1-linux-amd64.tar.gz

安裝完成後,如果希望節省磁盤空間,可以刪除 .tar.gz 文件。

最後,需要通過將 JAVA_HOME 環境變量指向 Liberica JDK 目錄來配置它。

export JAVA_HOME=$(pwd)/jdk-11.0.14.1

請注意: macOS 和 Windows 用户可參閲 Liberica JDK 安裝指南 以獲取安裝説明。

3. 獲取 Spring Native 項目

我們可以通過運行以下命令獲取 Spring Native 項目和 petclinic 應用示例:

git clone https://github.com/spring-projects-experimental/spring-native.git

4. 構建 JAR 文件

我們想要使用 Spring Native 項目中的一個示例,請運行到包含 spring petclinic JDBC 的目錄:

export PROJECT_DIR=$(pwd)/spring-native/samples/petclinic-jdbc && cd $PROJECT_DIR

為了構建 JAR 文件,可以使用以下命令:

./mvnw clean install

這將使我們獲得一個 24 MB target/petclinic-jdbc-0.0.1-SNAPSHOT.jar 文件。 我們將通過運行以下命令進行測試:

java -jar target/petclinic-jdbc-0.0.1-SNAPSHOT.jar

5. 使用 Liberica JDK 構建原生鏡像容器

現在讓我們對應用程序進行容器化。

請確保 Docker 守護進程正在運行。如果使用 Windows 或 macOS x86,則需要為 Docker 分配至少 8 GB 的內存。 從 Spring PetClinic JDBC 應用程序目錄中,需要輸入以下命令:

./mvnw spring-boot:build-image

這將構建 Spring Boot 原生鏡像容器,我們可以使用以下命令啓動:

docker run -it docker.io/library/petclinic-jdbc:0.0.1-SNAPSHOT

如果使用 Apple M1 芯片,由於缺少 Docker 的必要構建包,因此此步驟將對我們不可用。但是,最新版本的 Liberica Native Image Kit 與 Apple 硅完全兼容,因此我們可以繼續下一步,並使用 NIK 構建原生鏡像。

6. 使用 Liberica NIK 構建原生鏡像

我們將使用 Liberica Native Image Kit 構建另一個版本的 petclinic 原生鏡像。以下是安裝 NIK 的 Linux 步驟。對於 macOS 或 Windows,請參考 Liberica NIK 安裝指南

首先,我們需要切換到希望安裝的目錄:

cd directory_path_name

然後,我們下載 Liberica NIK Core 用於我們的平台。它包含 Liberica VM 和基於 GraalVM 的原生鏡像工具包,無需額外的語言,因此是構建 Java 原生鏡像的絕佳工具。

在我們的案例中,我們將獲得針對 Java 11 的 NIK 版本,用於 Linux:

wget https://download.bell-sw.com/vm/22.0.0.2/bellsoft-liberica-vm-openjdk11-22.0.0.2-linux-amd64.tar.gz

我們然後通過運行以下命令解壓文件:

tar -xzf bellsoft-liberica-vm-openjdk11-22.0.0.2-linux-amd64.tar.gz

定義 $JAVA_HOME 環境變量,將其指向 Liberica NIK。

export JAVA_HOME=$(pwd)/bellsoft-liberica-vm-openjdk11-22.0.0.2

現在,我們將進入 petclinic JDBC 應用程序目錄:

cd $PROJECT_DIR

我們可以通過運行以下命令創建原生圖像:

./mvnw -Pnative install

它涉及“原生”構建配置文件,並生成 target/petclinic-jdbc 二進制文件,大小為 102.3 MB。

7. 啓動時間比較

現在我們測試應用程序和圖像的速度。我們使用配備 SSD 的 Intel(R) Core(TM) i7-8750H CPU PC 進行測試:

  • JAR 文件啓動時間約為 3.3 秒
  • 我們構建的第一個容器啓動時間約為 0.07 秒
  • 使用 NIK Core 構建的 native 圖像啓動時間為 0.068 秒。

8. 結論

Spring 原生鏡像即使在項目處於 Beta 階段時也能順利構建並運行,啓動時間縮短效果顯著。

我們預計,當 Spring Native 搭配 Liberica 原生鏡像套件作為端到端的構建原生鏡像解決方案時,將取得更好的結果。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.