Compartilhar via


Início rápido: Implante seu primeiro aplicativo Java Native Image nos Aplicativos Spring do Azure

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano Standard de consumo e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica a(o):❌ Básico/Standard ✔️ Enterprise

Este início rápido mostra como implantar um aplicativo do Spring Boot nos Aplicativos Spring do Azure como Native Image.

A funcionalidade de Native Image permite compilar aplicativos Java para executáveis autônomos, conhecidos como Native Images. Esses executáveis podem fornecer benefícios significativos, incluindo tempos de inicialização mais rápidos e menor sobrecarga de memória de runtime em comparação com uma JVM (Máquina Virtual Java) tradicional.

O projeto de exemplo é o aplicativo Spring Petclinic. A captura de tela a seguir mostra o aplicativo:

Captura de tela de um aplicativo Spring Petclinic no Aplicativos Spring do Azure.

1. Pré-requisitos

2. Preparar o projeto Spring Petclinic

Use as etapas a seguir para clonar e executar o aplicativo localmente.

  1. Use o seguinte comando para clonar o projeto Spring Petclinic do GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Use o seguinte comando para criar o projeto Spring Petclinic:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Use o seguinte comando para executar o aplicativo Spring Petclinic usando o Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. Acesse http://localhost:8080 no navegador para acessar o aplicativo Spring Petclinic.

3. Preparar o ambiente de nuvem

O principal recurso necessário para executar o aplicativo Spring Petclinic é uma instância dos Aplicativos Spring do Azure. Esta seção fornece as etapas para criar o recurso.

3.1. Fornecer nomes para cada recurso

Crie variáveis para manter os nomes dos recursos usando os comandos a seguir. Substitua os espaços reservados pelos seus valores.

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. Criar um novo grupo de recursos

Use as etapas a seguir para criar um novo grupo de recursos:

  1. Use o seguinte comando para fazer logon na CLI do Azure:

    az login
    
  2. Use o seguinte comando para definir o local padrão:

    az configure --defaults location=${LOCATION}
    
  3. Use o comando a seguir para listar todas as assinaturas disponíveis e determinar a ID de assinatura a ser usada:

    az account list --output table
    
  4. Use o comando a seguir para definir a assinatura padrão:

    az account set --subscription <subscription-ID>
    
  5. Use o comando a seguir para criar um grupo de recursos:

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Use o seguinte comando para definir o grupo de recursos recém-criado como o grupo de recursos padrão:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Criar uma instância do Azure Spring Apps

Os Aplicativos Spring do Azure são usados para hospedar o aplicativo Spring Petclinic. Use as seguintes etapas para criar uma instância dos Aplicativos Spring do Azure e dois aplicativos dentro dela:

  1. Use o seguinte comando para criar uma instância de serviço dos Aplicativos Spring do Azure. Um build de Native Image requer 16 Gi de memória durante o build da imagem, portanto, configure o tamanho do pool de build como S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Crie um arquivo builder-native.json no diretório atual e adicione o seguinte conteúdo:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Use o seguinte comando para criar um construtor personalizado para criar o aplicativo Native Image:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Use o comando a seguir para criar um aplicativo na instância dos Aplicativos Spring do Azure na qual implantar o aplicativo Spring Petclinic como um arquivo JAR. Configure o limite de memória para 1 Gi.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Use o seguinte comando para criar um aplicativo na instância dos Aplicativos Spring do Azure na qual o aplicativo Spring Petclinic será implantado como Native Image:

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    

4. Implantar o aplicativo em Aplicativos Spring do Azure

Agora que o ambiente de nuvem está preparado, os aplicativos estão prontos para serem implantados.

Use o seguinte comando para implantar o aplicativo Spring Petclinic como arquivo JAR:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17

Use o seguinte comando para implantar o aplicativo Spring Petclinic como Native Image:

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. Validar o aplicativo Native Image

Agora você pode acessar o aplicativo Native Image implantado para ver se ele funciona. Use as etapas a seguir para validar:

  1. Depois que a implantação for concluída, execute o seguinte comando para obter a URL do aplicativo:

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

    Você pode acessar o aplicativo com a URL mostrada na saída como Public Url. A página deve aparecer como você a viu no localhost.

  2. Use o seguinte comando para marcar o log do aplicativo para investigar problemas de implantação:

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

6. Comparar o desempenho do JAR e do Native Image

As seções a seguir descrevem como comparar o desempenho entre a implantação do JAR e do Native Image.

Hora de inicialização do servidor

Use o seguinte comando para verificar o log Started PetClinicApplication in XXX seconds do aplicativo e obter o tempo de inicialização do servidor para um aplicativo JAR:

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

A hora de inicialização do servidor é de cerca de 25s para um aplicativo JAR.

Use o seguinte comando para verificar o log do aplicativo e obter o tempo de inicialização do servidor para um aplicativo Native Image:

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

O tempo de inicialização do servidor é menor que 0,5s para um aplicativo Native Image.

Uso de memória

Use o seguinte comando para reduzir verticalmente o tamanho da memória para 512 Mi para um aplicativo Native Image:

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

A saída do comando deve mostrar que o aplicativo Native Image foi iniciado com sucesso.

Use o seguinte comando para reduzir verticalmente o tamanho da memória para 512 Mi para o aplicativo JAR:

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

A saída do comando deve mostrar que o aplicativo JAR falhou ao iniciar devido à memória insuficiente. A mensagem de saída deve ser semelhante ao exemplo a seguir: Terminating due to java.lang.OutOfMemoryError: Java heap space.

A figura a seguir mostra o uso otimizado de memória para a implantação do Native Image para uma carga de trabalho constante de 400 solicitações por segundo no aplicativo Petclinic. O uso de memória é cerca de 1/5 da memória consumida por sua implantação JAR equivalente.

Captura de tela do uso de memória otimizado de uma implantação de imagem nativa nos Aplicativos Spring do Azure.

Os Native Images oferecem tempos de inicialização mais rápidos e sobrecarga de memória de runtime reduzida em comparação com a JVM (Máquina Virtual Java) convencional.

7. Limpar os recursos

Se planejar continuar trabalhando com os tutoriais e inícios rápidos subsequentes, deixe esses recursos onde estão. Quando você não precisar mais dos recursos, exclua-os excluindo o grupo de recursos. Use o seguinte comando para excluir o grupo de recursos:

az group delete --name ${RESOURCE_GROUP}

8. Próximas etapas

Para obter mais informações, consulte os seguintes artigos: