Share via


Uso de Spring Data con Azure Cosmos DB para Apache Cassandra API

Este artículo le guiará en el proceso de creación, configuración, implementación, solución de problemas y escalado de aplicaciones web de Java en Azure App Service en Linux.

Se mostrará el uso de los siguientes componentes:

Requisitos previos

Los siguientes requisitos previos son necesarios para seguir los pasos descritos en este artículo:

Importante

Se requiere Spring Boot versión 2.5 o posterior para completar los pasos descritos en este artículo.

Clonación del repositorio de aplicaciones web de Java de ejemplo

Para este ejercicio, usará la aplicación Spring Todo, que es una aplicación Java creada con Spring Boot, Spring Data para Azure Cosmos DB y Azure Cosmos DB.

  1. Clone la aplicación Todo de Spring y copie el contenido de la carpeta .prep para inicializar el proyecto:

    Para 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. Cambie el directorio a la siguiente carpeta en el repositorio clonado:

    cd initial\spring-todo-app
    

Creación de una instancia de Azure Cosmos DB desde la CLI de Azure

En el procedimiento siguiente se crea la base de datos de Azure Cosmos DB mediante la CLI.

  1. Inicie sesión en la CLI de Azure y establezca el identificador de suscripción.

    az login
    
  2. Establezca el identificador de suscripción si es necesario.

    az account set -s <your-subscription-id>
    
  3. Cree un grupo de recursos de Azure y guarde el nombre del grupo de recursos para su uso posterior.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Cree Azure Cosmos DB y especifique el tipo como GlobalDocumentDB. El nombre de Azure Cosmos DB solo debe usar letras minúsculas. Asegúrese de anotar el campo documentEndpoint de la respuesta. Este valor lo necesitará más adelante.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Obtenga las claves de Azure Cosmos DB y anote el valor de primaryMasterKey para su uso posterior.

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

Compilación y ejecución de la aplicación en un entorno local

En el procedimiento siguiente se ejecuta la aplicación en el equipo de desarrollo.

  1. En la consola que prefiera, configure las variables de entorno que se muestran en las secciones de código siguientes con la información de conexión de Azure y Azure Cosmos DB que recopiló anteriormente en este artículo. Debe proporcionar un nombre único para WEBAPP_NAME y el valor de las variables 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 (símbolo del sistema):

    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:

    Si desea aprovisionar estas variables con un script, hay una plantilla para Bash en el directorio .prep que puede copiar y usar como punto de partida.

  2. Cambie el directorio mediante el comando siguiente:

    cd initial/spring-todo-app
    
  3. Ejecute la aplicación Todo de Spring localmente con el siguiente comando:

    mvn package spring-boot:run
    
  4. Una vez iniciada la aplicación, puede validar la implementación accediendo a la aplicación Spring Todo aquí: http://localhost:8080/.

    Aplicación de Spring que se ejecuta localmente

Implementación en App Service en Linux

En el procedimiento siguiente se implementa la aplicación en Linux en Azure.

  1. Abra el archivo pom.xml que copió anteriormente en el directorio initial/spring-todo-app del repositorio. Asegúrese de que el complemento maven para App de Azure Service esté incluido como se muestra en el siguiente archivo pom.xml. Si la versión no está establecida en 1.14.0, actualice el 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. Implementación en Java SE en App Service en 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. Vaya a la aplicación web que se ejecuta en Java SE en App Service en Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

Aplicación de Spring en ejecución en App Service en Linux

Solución de problemas de la aplicación Todo de Spring en Azure mediante la visualización de los registros

En el siguiente procedimiento se abren los archivos de registro en Azure.

  1. Configure el registro de la aplicación web de Java implementada en Azure App Service en Linux:

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. Abra la secuencia de registro remoto de la aplicación web de Java desde un equipo 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.
    

Escalado horizontal de la aplicación Todo de Spring

Use el procedimiento siguiente para escalar la aplicación.

  1. Escale horizontalmente la aplicación web de Java mediante la CLI de Azure:

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

Pasos siguientes

Consulte también

Para obtener más información sobre el uso de aplicaciones de Spring Boot en Azure, consulte los siguientes artículos:

Para más información sobre el uso de Azure con Java, consulte Azure para desarrolladores de Java y Working with Azure DevOps and Java (Trabajo con Azure DevOps y Java).

Spring Framework es una solución de código abierto que ayuda a los desarrolladores de Java a crear aplicaciones de nivel empresarial. Uno de los proyectos más populares que se basa en esa plataforma es Spring Boot, que proporciona un enfoque simplificado para crear aplicaciones de Java independientes. Para ayudar a los desarrolladores a empezar con Spring Boot, hay varios paquetes de ejemplo de Spring Boot disponibles en https://github.com/spring-guides/. Además de elegir de la lista de proyectos básicos de Spring Boot, el Spring Initializr ayuda a los desarrolladores en los primeros pasos para crear aplicaciones de Spring Boot personalizadas.