Поделиться через


Краткое руководство: Развертывание первого Java Native Image приложения в Azure Spring Apps

Note

Планы "Базовый", "Стандартный" и "Корпоративный" вступили в пенсионный период 17 марта 2025 года. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Эта статья относится к: ❎ Basic/Standard ✅ Enterprise

В этом кратком гиде показано, как развернуть приложение Spring Boot в Azure Spring Apps как нативное изображение.

Возможность Native Image позволяет компилировать Java-приложения в автономные исполняемые файлы, называемые Native Images. Эти исполняемые файлы могут обеспечить значительные преимущества, включая более быстрое время запуска и снижение затрат на память среды выполнения по сравнению с традиционной виртуальной машиной JVM (виртуальная машина Java).

Пример проекта — это приложение Spring Petclinic. На следующем снимку экрана показано приложение:

Снимок экрана: приложение Spring Petclinic в Azure Spring Apps.

1. Предварительные требования

2. Подготовка проекта Spring Petclinic

Выполните следующие действия, чтобы клонировать и запустить приложение локально.

  1. Используйте следующую команду, чтобы клонировать проект Spring Petclinic из GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Чтобы создать проект Spring Petclinic, выполните следующую команду:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Используйте следующую команду, чтобы запустить приложение Spring Petclinic с помощью Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. Перейдите по адресу 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. Создание новой группы ресурсов

Чтобы создать новую группу ресурсов, выполните следующие действия.

  1. Используйте следующую команду, чтобы войти в Azure CLI:

    az login
    
  2. Чтобы задать расположение по умолчанию, используйте следующую команду:

    az configure --defaults location=${LOCATION}
    
  3. Используйте следующую команду, чтобы получить список всех доступных подписок, чтобы определить идентификатор подписки для использования:

    az account list --output table
    
  4. Чтобы задать подписку по умолчанию, используйте следующую команду:

    az account set --subscription <subscription-ID>
    
  5. Выполните следующую команду, чтобы создать группу ресурсов.

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Используйте следующую команду, чтобы задать только что созданную группу ресурсов в качестве группы ресурсов по умолчанию:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Создайте экземпляр Azure Spring Apps

Azure Spring Apps используется для размещения приложения Spring Petclinic. Чтобы создать экземпляр Azure Spring Apps и два приложения внутри него, выполните следующие действия.

  1. Используйте следующую команду, чтобы создать экземпляр службы Azure Spring Apps. Для сборки нативного образа требуется 16 ГиБ памяти в процессе компиляции, поэтому настройте размер пула сборок как S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Создайте файлbuilder-native.json в текущем каталоге и добавьте следующее содержимое:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Используйте следующую команду, чтобы создать пользовательский сборщик, чтобы собрать приложение Native Image.

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Используйте следующую команду, чтобы создать приложение в экземпляре Azure Spring Apps, в котором развертывается приложение Spring Petclinic в виде JAR-файла. Настройте ограничение памяти до 1 Ги.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Используйте следующую команду, чтобы создать приложение в экземпляре 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. Проверка приложения нативного образа

Теперь вы можете получить доступ к развернутом приложению Native Image, чтобы узнать, работает ли оно. Чтобы проверить, выполните следующие действия.

  1. После завершения развертывания можно выполнить следующую команду, чтобы получить URL-адрес приложения:

    az spring app show \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --output table
    

    Вы можете получить доступ к приложению с URL-адресом, отображаемым в выходных данных как Public Url. Страница должна выглядеть так же, как она выглядела на локальном сервере.

  2. Используйте следующую команду, чтобы проверить журнал приложения, чтобы изучить любую проблему развертывания:

    az spring app logs \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME}
    

6. Сравнение производительности для JAR-файла и собственного образа

В следующих разделах описывается сравнение производительности между развертыванием JAR и Native Image.

Время запуска сервера

Используйте следующую команду, чтобы проверить журнал Started PetClinicApplication in XXX seconds приложения, чтобы получить время запуска сервера для JAR-приложения:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME}

Время запуска сервера составляет около 25 с для JAR-приложения.

Используйте следующую команду, чтобы проверить журнал приложения, чтобы получить время запуска сервера для приложения Native Image:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME}

Время запуска сервера меньше 0,5 с для приложения Native Image.

Использование памяти

Используйте следующую команду, чтобы уменьшить объём памяти до 512 Mi для приложения с нативным образом.

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --memory 512Mi

Выходные данные команды должны показать, что приложение Native Image успешно запущено.

Используйте следующую команду, чтобы уменьшить размер памяти до 512 Mi для JAR-приложения:

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

На следующем рисунке показано оптимизированное использование памяти для развертывания Native Image при постоянной рабочей нагрузке в 400 запросов в секунду в приложение Petclinic. Использование памяти составляет около 1/5 от объема, используемого при аналогичном развертывании JAR.

Снимок экрана оптимизированного использования памяти при развертывании

Нативные образы обеспечивают более быстрое время запуска и снижают нагрузку на память во время выполнения по сравнению с классической виртуальной машиной Java (JVM).

7. Очистка ресурсов

Если вы планируете продолжить работать с последующими краткими руководствами и учебниками, то, возможно, стоит оставить эти ресурсы неизменными. Если ресурсы больше не нужны, удалите их, удалив группу ресурсов. Чтобы удалить группу ресурсов, используйте следующую команду:

az group delete --name ${RESOURCE_GROUP}

8. Дальнейшие действия

Дополнительные сведения см. в следующих статьях: