Compartilhar via


Usar o Spring Data com a API do Azure Cosmos DB para Apache Cassandra

Este artigo orientará você pelo processo de criação, configuração, implantação, solução de problemas e dimensionamento de aplicativos Web Java no Serviço de Aplicativo do Azure no Linux.

Ele demonstrará o uso dos seguintes componentes:

Pré-requisitos

Os seguintes pré-requisitos são necessários para seguir as etapas deste artigo:

  • Para implantar um aplicativo Web Java na nuvem, você precisa de uma assinatura do Azure. Se você ainda não tiver uma assinatura do Azure, poderá ativar seus benefícios de assinante do MSDN ou inscrever-se em uma conta do Azure gratuita.
  • CLI do Azure 2.0
  • JDK do Java 8
  • Maven 3

Importante

O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas neste artigo.

Clonar o repositório de aplicativo Web Java de exemplo

Para este exercício, você usará o aplicativo Spring Todo, que é um aplicativo Java criado usando Spring Boot, Spring Data para do Azure Cosmos DB e do Azure Cosmos DB.

  1. Clone o aplicativo Spring Todo e copie o conteúdo da pasta .prep para inicializar o projeto:

    Para o bash:

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    yes | cp -rf .prep/* .
    

    Para Windows:

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    cd e2e-java-experience-in-app-service-linux-part-2
    xcopy .prep /f /s /e /y
    
  2. Altere o diretório para a seguinte pasta no repositório clonado:

    cd initial\spring-todo-app
    

Criar um Azure Cosmos DB da CLI do Azure

O procedimento a seguir cria o banco de dados do Azure Cosmos DB usando a CLI.

  1. Entre na CLI do Azure e defina sua ID de assinatura.

    az login
    
  2. Defina a ID da assinatura, se necessário.

    az account set -s <your-subscription-id>
    
  3. Crie um grupo de recursos do Azure e salve o nome do grupo de recursos para uso posterior.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Crie o Azure Cosmos DB e especifique o tipo como GlobalDocumentDB. O nome do Azure Cosmos DB deve usar apenas letras minúsculas. Observe o campo documentEndpoint na resposta. Você precisará desse valor mais tarde.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Obtenha suas chaves do Azure Cosmos DB, registre o valor primaryMasterKey para uso posterior.

    az cosmosdb keys list \
        --resource-group <your-azure-group-name> \
        --name <your-azure-COSMOSDB-name>
    

Compilar e executar o aplicativo localmente

O procedimento a seguir executa o aplicativo no computador de desenvolvimento.

  1. No console de sua escolha, configure as variáveis de ambiente mostradas nas seções de código a seguir com as informações de conexão do Azure e do Azure Cosmos DB coletadas anteriormente neste artigo. Você precisa fornecer um nome exclusivo para WEBAPP_NAME e valor para as variáveis REGION.

    Para Linux (Bash):

    export COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    export COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    export COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here>
    export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
    export WEBAPP_NAME=<put-your-Webapp-name-here>
    export REGION=<put-your-REGION-here>
    export SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

    Para Windows (Prompt de Comando):

    set COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    set COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    set COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here>
    set RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
    set WEBAPP_NAME=<put-your-Webapp-name-here>
    set REGION=<put-your-REGION-here>
    set SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

    Nota

    Se você quiser provisionar essas variáveis com um script, há um modelo para Bash no diretório .prep que você pode copiar e usar como ponto de partida.

  2. Altere o diretório usando o seguinte comando:

    cd initial/spring-todo-app
    
  3. Execute o aplicativo Spring Todo localmente com o seguinte comando:

    mvn package spring-boot:run
    
  4. Depois que o aplicativo for iniciado, você poderá validar a implantação acessando o aplicativo Spring Todo aqui: http://localhost:8080/.

    aplicativo Spring em execução localmente

Implantar no Serviço de Aplicativo Linux

O procedimento a seguir implanta o aplicativo no Linux no Azure.

  1. Abra o arquivo pom.xml que você copiou anteriormente para o diretório initial/spring-todo-app do repositório. Certifique-se de que o plugin do Maven para Serviço de Aplicativo do Azure está incluído, conforme o que está indicado no arquivo pom.xml a seguir. Se a versão não estiver definida como 1.14.0, atualize o valor.

    <plugins> 
    
        <!--*************************************************-->
        <!-- Deploy to Java SE in App Service Linux           -->
        <!--*************************************************-->
    
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-webapp-maven-plugin</artifactId>
            <version>1.14.0</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
                <!-- Web App information -->
                <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
                <appName>${WEBAPP_NAME}</appName>
                <region>${REGION}</region>
                <pricingTier>P1v2</pricingTier>
                <!-- Java Runtime Stack for Web App on Linux-->
                <runtime>
                    <os>Linux</os>
                    <javaVersion>Java 8</javaVersion>
                    <webContainer>Java SE</webContainer>
                </runtime>
                <deployment>
                    <resources>
                        <resource>
                            <directory>${project.basedir}/target</directory>
                            <includes>
                                <include>*.jar</include>
                            </includes>
                        </resource>
                    </resources>
                </deployment>
                <appSettings>
                    <property>
                        <name>COSMOS_URI</name>
                        <value>${COSMOS_URI}</value>
                    </property>
                    <property>
                        <name>COSMOS_KEY</name>
                        <value>${COSMOS_KEY}</value>
                    </property>
                    <property>
                        <name>COSMOS_DATABASE</name>
                        <value>${COSMOS_DATABASE}</value>
                    </property>
                    <property>
                        <name>JAVA_OPTS</name>
                        <value>-Dserver.port=80</value>
                    </property>
                </appSettings>
    
            </configuration>
        </plugin>            
        ...
    </plugins>
    
  2. Implantar para Java SE no Serviço de Aplicativo Linux

    mvn azure-webapp:deploy
    
    // Deploy
    bash-3.2$ mvn azure-webapp:deploy
    [INFO] Scanning for projects...
    [INFO]
    [INFO] -------< com.azure.spring.samples:spring-todo-app >--------
    [INFO] Building spring-todo-app 2.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp-maven-plugin:1.14.0:deploy (default-cli) @ spring-todo-app ---
    Auth type: AZURE_CLI
    Default subscription: Consoto Subscription(subscription-id-xxx)
    Username: user@contoso.com
    [INFO] Subscription: Consoto Subscription(subscription-id-xxx)
    [INFO] Creating app service plan...
    [INFO] Successfully created app service plan asp-spring-todo-app.
    [INFO] Creating web app spring-todo-app...
    [INFO] Successfully created Web App spring-todo-app.
    [INFO] Trying to deploy artifact to spring-todo-app...
    [INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  02:05 min
    [INFO] Finished at: 2021-05-28T09:43:19+08:00
    [INFO] ------------------------------------------------------------------------
    
  3. Navegue até seu aplicativo Web em execução no Java SE no Serviço de Aplicativo Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

aplicativo Spring em execução no Serviço de Aplicativo no Linux

Solucionar problemas do aplicativo Spring Todo no Azure exibindo logs

O procedimento a seguir abre arquivos de log no Azure.

  1. Configurar logs para o aplicativo Java Web implantado no Azure App Service para Linux:

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. Abra o fluxo de log remoto do aplicativo Web Java de um computador local:

    az webapp log tail \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME}
    
    bash-3.2$ az webapp log tail --name ${WEBAPP_NAME}  --resource-group ${RESOURCEGROUP_NAME}
    2021-05-28T01:46:08.000655632Z   _____                               
    2021-05-28T01:46:08.000701432Z   /  _  \ __________ _________   ____  
    2021-05-28T01:46:08.000708133Z  /  /_\  \___   /  |  \_  __ \_/ __ \ 
    2021-05-28T01:46:08.000711733Z /    |    \/    /|  |  /|  | \/\  ___/ 
    2021-05-28T01:46:08.000714933Z \____|__  /_____ \____/ |__|    \___  >
    2021-05-28T01:46:08.000718233Z         \/      \/                  \/ 
    2021-05-28T01:46:08.000721333Z A P P   S E R V I C E   O N   L I N U X
    2021-05-28T01:46:08.000724233Z Documentation: http://aka.ms/webapp-linux
    ...
    ...
    2021-05-28T01:46:18.925044188Z   .   ____          _            __ _ _
    2021-05-28T01:46:18.925481392Z  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    2021-05-28T01:46:18.926004297Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    2021-05-28T01:46:18.926587603Z  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    2021-05-28T01:46:18.926599403Z   '  |____| .__|_| |_|_| |_\__, | / / / /
    2021-05-28T01:46:18.926841806Z  =========|_|==============|___/=/_/_/_/
    2021-05-28T01:46:18.931157849Z  :: Spring Boot ::                (v2.4.5)
    ...
    ...
    2021-05-28T01:46:29.842553633Z 2021-05-28 01:46:29.842  INFO 124 --- [           main] c.azure.spring.   samples.TodoApplication   : Started TodoApplication in 12.635 seconds (JVM running for 17.664)
    2021-05-28T01:46:30.477951594Z 2021-05-28 01:46:30.477  INFO 124 --- [p-nio-80-exec-1] o.a.c.c.C.   [Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2021-05-28T01:46:30.483316162Z 2021-05-28 01:46:30.483  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2021-05-28T01:46:30.485411088Z 2021-05-28 01:46:30.484  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Completed initialization in 0 ms
    2021-05-28T01:47:19.683003828Z 2021-05-28 01:47:19.682  INFO 124 --- [p-nio-80-exec-9] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    2021-05-28T01:47:26.069984388Z 2021-05-28 01:47:26.069  INFO 124 --- [-nio-80-exec-10] c.a.s.s.   controller.TodoListController    : POST request access '/api/todolist' path with item: Milk
    2021-05-28T01:47:26.649080678Z 2021-05-28 01:47:26.648  INFO 124 --- [p-nio-80-exec-1] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    

Expandir a capacidade do aplicativo Spring Todo

Use o procedimento a seguir para dimensionar o aplicativo.

  1. Escalar horizontalmente o aplicativo Web Java usando a CLI do Azure:

    az appservice plan update \
        --number-of-workers 2 \
        --name ${WEBAPP_PLAN_NAME} \
        --resource-group ${RESOURCEGROUP_NAME}
    

Próximas etapas

Consulte também

Para obter mais informações sobre como usar aplicativos Spring Boot no Azure, consulte os seguintes artigos:

Para obter mais informações sobre como usar o Azure com Java, consulte o Azure para Desenvolvedores Java e o Trabalhando com Azure DevOps e Java.

O Spring Framework é uma solução de software livre que ajuda os desenvolvedores Java a criar aplicativos de nível empresarial. Um dos projetos mais populares criados com base nessa plataforma é spring boot, que fornece uma abordagem simplificada para a criação de aplicativos Java autônomos. Para ajudar os desenvolvedores a começar a usar o Spring Boot, vários pacotes spring boot de exemplo estão disponíveis em https://github.com/spring-guides/. Além de escolher na lista de projetos básicos do Spring Boot, o Spring Initializr ajuda os desenvolvedores a começar a criar aplicativos Spring Boot personalizados.