你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:在 Azure Spring Apps 中部署你的第一个 Java 本机映像应用程序
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用。
本文适用于:❌ 基本版/标准版 ✔️ 企业版
本快速入门演示如何将 Spring Boot 应用程序作为本机映像部署到 Azure Spring Apps。
本机映像功能使你能够将 Java 应用程序编译为独立的可执行文件,称为本机映像。 与传统 JVM(Java 虚拟机)相比,这些可执行文件可提供显著的优势,包括更快的启动时间和更低的运行时内存开销。
示例项目是 Spring Petclinic 应用程序。 以下屏幕截图显示了该应用程序:
1.先决条件
- Azure 订阅。 如果你没有订阅,请在开始之前创建一个免费帐户。
- Git。
- Java 开发工具包 (JDK),版本 17。
- Azure CLI 版本 2.45.0 或更高版本。 使用以下命令安装 Azure Spring Apps 扩展:
az extension add --name spring
- 如果你是首次在目标订阅中部署 Azure Spring Apps Enterprise 计划实例,请参阅在 Azure 市场中查看 Azure Spring Apps Enterprise 层产品/服务的要求部分。
2. 准备 Spring Petclinic 项目
使用以下步骤在本地克隆和运行应用。
使用以下命令从 GitHub 克隆 Spring Petclinic 项目:
git clone https://github.com/Azure-Samples/spring-petclinic.git
使用以下命令生成 Spring Petclinic 项目:
cd spring-petclinic ./mvnw clean package -DskipTests -Pnative package
使用以下命令通过 Maven 运行 Spring Petclinic 应用程序:
java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
在浏览器中转到
http://localhost:8080
以访问 Spring Petclinic 应用程序。
3. 准备云环境
运行 Spring Petclinic 应用程序所需的主要资源是 Azure Spring Apps 实例。 本部分提供创建该资源的步骤。
3.1. 提供每个资源的名称
使用以下命令创建变量以保存资源名称。 请务必将占位符替换为你自己的值。
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
export AZURE_SPRING_APPS_NAME=<Azure-Spring-Apps-service-instance-name>
export NATIVE_BUILDER=native-builder
export JAR_APP_NAME=jar-app
export NATIVE_APP_NAME=native-app
export JAR_PATH=target/spring-petclinic-3.1.0-SNAPSHOT.jar
3.2. 创建新的资源组
按照以下步骤创建新的资源组:
使用以下命令登录到 Azure CLI:
az login
使用以下命令设置默认位置:
az configure --defaults location=${LOCATION}
使用以下命令列出所有可用的订阅,以确定要使用的订阅 ID:
az account list --output table
使用以下命令设置默认订阅:
az account set --subscription <subscription-ID>
使用以下命令来创建资源组:
az group create --resource-group ${RESOURCE_GROUP}
使用以下命令将新创建的资源组设置为默认资源组:
az configure --defaults group=${RESOURCE_GROUP}
3.3. 创建 Azure Spring Apps 实例
Azure Spring Apps 用于托管 Spring Petclinic 应用。 使用以下步骤创建一个 Azure Spring Apps 实例,并在其内创建两个应用程序:
使用以下命令创建 Azure Spring Apps 服务实例。 本机映像生成在映像生成期间需要 16 Gi 内存,因此请将生成池大小配置为 S7。
az spring create \ --name ${AZURE_SPRING_APPS_NAME} \ --sku enterprise \ --build-pool-size S7
在当前目录中创建 builder-native.json 文件,然后添加以下内容:
{ "stack": { "id": "io.buildpacks.stacks.jammy", "version": "tiny" }, "buildpackGroups": [ { "name": "default", "buildpacks": [ { "id": "tanzu-buildpacks/java-native-image" } ] } ] }
使用以下命令创建自定义生成器以生成本机映像应用程序:
az spring build-service builder create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_BUILDER} \ --builder-file builder-native.json
使用以下命令在 Azure Spring Apps 实例中创建一个应用程序,在其中将 Spring Petclinic 应用程序部署为 JAR 文件。 将内存限制配置为 1 Gi。
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${JAR_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
使用以下命令在 Azure Spring Apps 实例中创建一个应用程序,在其中将 Spring Petclinic 应用程序部署为本机映像:
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
4. 将应用部署到 Azure Spring Apps
云环境准备就绪后,即可部署应用程序。
使用以下命令将 Spring Petclinic 应用程序部署为 JAR 文件:
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17
使用以下命令将 Spring Petclinic 应用程序部署为本机映像:
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--builder ${NATIVE_BUILDER} \
--build-cpu 8 \
--build-memory 16Gi \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17 BP_NATIVE_IMAGE=true
5. 验证本机映像应用
现在,你可以访问部署的本机映像应用以查看它是否正常工作。 按照以下步骤来验证:
部署完成后,可以运行以下命令来获取应用 URL:
az spring app show \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --output table
可以使用输出中显示的 URL
Public Url
来访问该应用。 页面应如你在 localhost 中看到的那样显示。使用以下命令检查应用程序的日志,以调查任何部署问题:
az spring app logs \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME}
6. 比较 JAR 和本机映像的性能
以下部分介绍如何比较 JAR 与本机映像部署之间的性能。
服务器启动时间
使用以下命令检查应用的日志 Started PetClinicApplication in XXX seconds
,以获取 JAR 应用的服务器启动时间:
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME}
JAR 应用的服务器启动时间约为 25 秒。
使用以下命令检查应用的日志,以获取本机映像应用的服务器启动时间:
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME}
本机映像应用的服务器启动时间小于 0.5 秒。
内存使用率
使用以下命令将本机映像应用的内存大小纵向缩减为 512 Mi:
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--memory 512Mi
命令输出应显示本机映像应用已成功启动。
使用以下命令将 JAR 应用的内存大小纵向缩减为 512 Mi:
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--memory 512Mi
命令输出应显示 JAR 应用由于内存不足而无法启动。 输出消息应类似于以下示例:Terminating due to java.lang.OutOfMemoryError: Java heap space
。
下图显示了本机映像部署的优化内存使用情况,该部署的恒定工作负载为每秒 400 个请求进入 Petclinic 应用程序。 内存使用量大约是其等效 JAR 部署占用的内存的 1/5。
与传统 Java 虚拟机 (JVM) 相比,本机映像具有更快的启动时间和更低的运行时内存开销。
7.清理资源
如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要这些资源,可通过删除资源组将其删除。 使用以下命令删除资源组:
az group delete --name ${RESOURCE_GROUP}
8.后续步骤
有关详细信息,请参阅以下文章: