Uso de Spring Data con Azure Cosmos DB para Apache Cassandra API
Este artículo le guiará por 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.
Mostrará el uso de los siguientes componentes:
Prerrequisitos
Se requieren los siguientes requisitos previos para seguir los pasos descritos en este artículo:
- Para implementar una aplicación web de Java en la nube, necesita una suscripción de Azure. Si aún no tiene una suscripción de Azure, puede activar las ventajas del suscriptor de MSDN o registrarse para obtener una cuenta gratuita de Azure .
- Azure CLI 2.0
- Java 8 JDK
- Maven 3
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.
Clone la aplicación Spring Todo 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
Cambie el directorio a la siguiente carpeta del 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.
Inicie sesión en la CLI de Azure y establezca el identificador de suscripción.
az login
Establezca el identificador de suscripción si es necesario.
az account set -s <your-subscription-id>
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>
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
en la respuesta. Necesitará este valor más adelante.az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Obtenga las claves de Azure Cosmos DB y registre el valor de
primaryMasterKey
para su uso posterior.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
Compilar y ejecutar la aplicación localmente
El siguiente procedimiento ejecuta la aplicación en el equipo de desarrollo.
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 un valor para la variable 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 (Command Prompt):
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.
Cambie el directorio mediante el comando siguiente:
cd initial/spring-todo-app
Ejecute la aplicación Spring Todo localmente con el siguiente comando:
mvn package spring-boot:run
Una vez iniciada la aplicación, puede validar la implementación accediendo a la aplicación Spring Todo aquí:
http://localhost:8080/
.
Implementación en App Service Linux
El procedimiento siguiente implementa la aplicación en Linux en Azure.
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 Azure App Service se incluye 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>
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] ------------------------------------------------------------------------
Vaya a la aplicación web que se ejecuta en Java SE en App Service Linux:
https://<WEBAPP_NAME>.azurewebsites.net
Solución de problemas de spring Todo App en Azure mediante la visualización de registros
El procedimiento siguiente abre los archivos de registro en Azure.
Configure los registros 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
Abra el flujo de registro remoto de la aplicación web de Java desde una máquina 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.
Escalado horizontal de aplicaciones 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
- Guía para desarrolladores de Java para App Service en Linux
- Azure para desarrolladores de Java Para más información sobre Spring y Azure, continúe con el Centro de documentación de Spring en Azure.
Consulte también
Para más información sobre el uso de aplicaciones de Spring Boot en Azure, consulte los siguientes artículos:
Implementación de una aplicación de Spring Boot en Linux en Azure App Service
ejecutar una aplicación de Spring Boot en un clúster de Kubernetes en azure Container Service
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).
El 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 Java independientes. Para ayudar a los desarrolladores a empezar a trabajar con Spring Boot, hay varios paquetes de Spring Boot de ejemplo disponibles en https://github.com/spring-guides/. Además de elegir entre la lista de proyectos básicos de Spring Boot, el Spring Initializr ayuda a los desarrolladores a empezar a crear aplicaciones personalizadas de Spring Boot.