Usar dados do Spring com o Azure Cosmos DB para Apache Cassandra API
Este artigo explica o processo de criação, configuração, implementação, resolução de problemas e dimensionamento de aplicações Web Java no Serviço de Aplicações do Azure no Linux.
Demonstrará a utilização dos seguintes componentes:
- Spring Boot Starter com o Azure Cosmos DB para NoSQL
- BD do Cosmos para o Azure
- Serviço de Aplicações - Linux
Pré-requisitos
São necessários os seguintes pré-requisitos para seguir os passos apresentados neste artigo:
- Para implementar uma aplicação Web Java na cloud, precisa de uma subscrição do Azure. Se ainda não tiver uma subscrição do Azure, pode ativar os Benefícios de subscritor do MSDN ou inscrever-se numa conta do Azure gratuita.
- CLI 2.0 do Azure
- Java 8 JDK
- 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 Aplicações 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 Azure Cosmos DB e Azure Cosmos DB.
Clone a aplicação Spring Todo e copie os conteúdos da pasta .prep para inicializar o projeto:
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
Altere o diretório para a seguinte pasta no repositório clonado:
cd initial\spring-todo-app
Criar uma base de dados do Azure Cosmos DB a partir da CLI do Azure
O procedimento a seguir cria o banco de dados do Azure Cosmos DB usando a CLI.
Entre na CLI do Azure e defina sua ID de assinatura.
az login
Defina o ID da assinatura, se necessário.
az account set -s <your-subscription-id>
Crie um grupo de recursos do Azure e salve de lado o nome do grupo de recursos para uso posterior.
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
Crie o Azure Cosmos DB e especifique o tipo como GlobalDocumentDB. O nome do Azure Cosmos DB deve usar apenas letras minúsculas. Lembre-se de registar o campo
documentEndpoint
na resposta. Vai precisar deste valor mais à frente.az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Obtenha as suas chaves do Azure Cosmos DB e registe o valor
primaryMasterKey
para utilização posterior.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
Compilar e Executar a Aplicação Localmente
O procedimento seguinte executa a aplicação no computador de programação.
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 (Linha de Comandos):
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 quiser aprovisionar estas variáveis com um script, existe um modelo para Bash no diretório .prep que pode copiar e utilizar como ponto de partida.
Altere o diretório usando o seguinte comando:
cd initial/spring-todo-app
Execute a aplicação Spring Todo localmente com o comando seguinte:
mvn package spring-boot:run
Depois que o aplicativo for iniciado, você poderá validar a implantação acessando o aplicativo Spring Todo aqui:
http://localhost:8080/
.
Implementar no Serviço de Aplicações para Linux
O seguinte procedimento implementa a aplicação em Linux no Azure.
Abra o arquivo pom.xml que você copiou anteriormente para o diretório inicial/spring-todo-app do repositório. Verifique se o plug-in Maven para o Serviço de Aplicativo do Azure está incluído, conforme visto no arquivo de 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>
Implementar para Java SE no Serviço de Aplicações do 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] ------------------------------------------------------------------------
Navegue para a sua aplicação Web executada no Java SE no Serviço de Aplicações do Linux:
https://<WEBAPP_NAME>.azurewebsites.net
Resolver problemas da Aplicação Spring Todo no Azure ao Visualizar Registos
O procedimento seguinte abre ficheiros de registo no Azure.
Configure os registos da aplicação Web Java implementada no Serviço de Aplicações do Azure no Linux:
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
Abra a transmissão de registos remota da aplicação Web Java a partir 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.
Aumentar horizontalmente a Aplicação Spring Todo
Siga o seguinte procedimento para dimensionar a aplicação.
Aumente horizontalmente a aplicação Web Java com a CLI do Azure:
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
Próximos passos
- Guia para programadores de Java no Serviço de Aplicações do Linux
- Azure para Programadores de Java – para saber mais sobre o Spring e o Azure, avance para o centro de documentação relativa ao Spring no Azure.
Consulte também
Para obter mais informações sobre como utilizar as aplicações Spring Boot no Azure, veja os artigos seguintes:
Implantar um aplicativo Spring Boot no Linux no Serviço de Aplicativo do Azure
Executar uma Aplicação do Spring Boot num Cluster do Kubernetes no Azure Container Service (Executar uma Aplicação Spring Boot num Cluster do Kubernetes no Azure Container Service)
Para obter mais informações sobre a utilização do Azure com Java, veja Azure para Programadores de Java e Working with Azure DevOps and Java (Trabalhar com o Azure DevOps e Java).
O Spring Framework é uma solução open source que ajuda os programadores de Java a criar aplicações de nível empresarial. Um dos projetos mais populares criado com base nessa plataforma é o Spring Boot, que fornece uma abordagem simplificada para a criação de aplicações Java autónomas. Para ajudar os programadores a começarem a utilizar o Spring Boot, encontram-se vários exemplos de pacotes do Spring Boot disponíveis em https://github.com/spring-guides/. Além de escolher a partir da lista de projetos básicos do Spring Boot, o Spring Initializr ajuda os programadores a começarem a criar aplicações Spring Boot personalizadas.