Tutorial: Criar um aplicativo Web Java Spring Boot com o Serviço de Aplicativo do Azure no Linux e no Azure Cosmos DB
Nota
Para aplicativos Spring, recomendamos o uso do Azure Spring Apps. No entanto, você ainda pode usar o Serviço de Aplicativo do Azure como destino. Consulte Java Workload Destination Guidance para obter conselhos.
Este tutorial orienta você pelo processo de criação, configuração, implantação e dimensionamento de aplicativos Web Java no Azure. Quando terminar, você terá um aplicativo Spring Boot armazenando dados no Azure Cosmos DB em execução no Serviço de Aplicativo do Azure no Linux.
Neste tutorial, irá aprender a:
- Crie uma base de dados do Azure Cosmos DB.
- Conectar um aplicativo de exemplo ao banco de dados e testá-lo localmente
- Implantar o aplicativo de exemplo no Azure
- Transmitir logs de diagnóstico do Serviço de Aplicativo
- Adicionar instâncias adicionais para expandir o aplicativo de exemplo
Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
Pré-requisitos
Clone o aplicativo TODO de exemplo e prepare o repositório
Este tutorial usa um aplicativo de lista TODO de exemplo com uma interface do usuário da Web que chama uma API REST do Spring apoiada pelo Spring Data para o Azure Cosmos DB. O código do aplicativo está disponível no GitHub. Para saber mais sobre como escrever aplicativos Java usando o Spring e o Azure Cosmos DB, consulte o tutorial do Spring Boot Starter com o Azure Cosmos DB para NoSQL e o início rápido do Spring Data for Azure Cosmos DB.
Execute os seguintes comandos em seu terminal para clonar o repositório de exemplo e configurar o ambiente do aplicativo de exemplo.
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
yes | cp -rf .prep/* .
Criar uma base de dados do Azure Cosmos DB
Siga estas etapas para criar um banco de dados do Azure Cosmos DB em sua assinatura. O aplicativo de lista TODO se conectará a esse banco de dados e armazenará seus dados durante a execução, persistindo o estado do aplicativo, não importa onde você execute o aplicativo.
Inicie sessão na sua CLI do Azure e, opcionalmente, defina a sua subscrição se tiver mais do que uma ligada às suas credenciais de início de sessão.
az login az account set -s <your-subscription-id>
Crie um Grupo de Recursos do Azure, anotando o nome do grupo de recursos.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Crie o Azure Cosmos DB com o
GlobalDocumentDB
tipo. O nome da instância do Azure Cosmos DB deve usar apenas letras minúsculas. Anote odocumentEndpoint
campo na resposta do comando.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Obtenha sua chave do Azure Cosmos DB para se conectar ao aplicativo. Mantenha o ,
documentEndpoint
por perto,primaryMasterKey
pois você precisará deles na próxima etapa.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Configurar as propriedades do aplicativo TODO
Abra um terminal no computador. Copie o arquivo de script de exemplo no repositório clonado para que você possa personalizá-lo para o banco de dados do Azure Cosmos DB que você acabou de criar.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Edite .scripts/set-env-variables.sh
em seu editor favorito e forneça informações de conexão do Azure Azure Cosmos DB. Para a configuração Linux do Serviço de Aplicativo, use a mesma região anterior (your-resource-group-region
) e o grupo de recursos (your-azure-group-name
) usados ao criar o banco de dados do Azure Cosmos DB. Escolha um WEBAPP_NAME que seja exclusivo, pois ele não pode duplicar nenhum nome de aplicativo Web em nenhuma implantação do Azure.
export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>
Em seguida, execute o script:
source .scripts/set-env-variables.sh
Essas variáveis de ambiente são usadas no application.properties
aplicativo de lista TODO. Os campos no arquivo de propriedades configuram uma configuração de repositório padrão para o Spring Data:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Em seguida, o aplicativo de exemplo usa a @Document
anotação importada para configurar um tipo de com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
entidade a ser armazenado e gerenciado pelo Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Execute a aplicação de exemplo
Use o Maven para executar o exemplo.
mvn package spring-boot:run
A saída deve ser semelhante à seguinte.
bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101 INFO 7673 --- [ main] c.m.azure.documentdb.DocumentClient : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)
Você pode acessar o Spring TODO App localmente usando este link assim que o aplicativo for iniciado: http://localhost:8080/
.
Se você vir exceções em vez da mensagem "Iniciado TodoApplication", verifique se o bash
script na etapa anterior exportou as variáveis de ambiente corretamente e se os valores estão corretos para o banco de dados do Azure Cosmos DB que você criou.
Configurar a implementação do Azure
Abra o pom.xml
initial/spring-boot-todo
arquivo no diretório e adicione o seguinte Plug-in do Aplicativo Web do Azure para configuração do Maven .
<plugins>
<!--*************************************************-->
<!-- Deploy to Java SE in App Service Linux -->
<!--*************************************************-->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<!-- 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>COSMOSDB_URI</name>
<value>${COSMOSDB_URI}</value>
</property>
<property>
<name>COSMOSDB_KEY</name>
<value>${COSMOSDB_KEY}</value>
</property>
<property>
<name>COSMOSDB_DBNAME</name>
<value>${COSMOSDB_DBNAME}</value>
</property>
<property>
<name>JAVA_OPTS</name>
<value>-Dserver.port=80</value>
</property>
</appSettings>
</configuration>
</plugin>
...
</plugins>
Implantar no Serviço de Aplicativo no Linux
Use a mvn azure-webapp:deploy
meta Maven para implantar o aplicativo TODO no Serviço de Aplicativo do Azure no Linux.
# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[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:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
A saída contém a URL para seu aplicativo implantado (neste exemplo, https://spring-todo-app.azurewebsites.net
). Pode copiar este URL para o seu browser ou executar o seguinte comando na janela do Terminal para carregar a sua aplicação.
explorer https://spring-todo-app.azurewebsites.net
Você deve ver o aplicativo em execução com o URL remoto na barra de endereço:
Transmitir registos de diagnóstico em fluxo
Para aceder aos registos da consola gerados a partir do código da sua aplicação no Serviço de Aplicações, ative o registo de diagnósticos ao executar o seguinte comando no Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Os valores possíveis para --level
são: Error
, Warning
, Info
e Verbose
. Cada nível subsequente inclui o nível anterior. Por exemplo: Error
inclui apenas mensagens de erro e Verbose
inclui todas as mensagens.
Depois de ativar o registo de diagnósticos, execute o seguinte comando para ver o fluxo de registos:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Se não vir os registos da consola imediatamente, volte a consultar dentro de 30 segundos.
Nota
Também pode inspecionar os ficheiros de registo no browser em https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Para parar a transmissão de registos em qualquer altura, escreva Ctrl
+C
.
Dimensionar o aplicativo TODO
Dimensione o aplicativo adicionando outro trabalhador:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Clean up resources (Limpar recursos)
Se não precisar destes recursos para outro tutorial (veja os Passos seguintes), pode eliminá-los ao executar o seguinte comando no Cloud Shell:
az group delete --name <your-azure-group-name> --yes
Próximos passos
Azure para desenvolvedoresJava Spring Boot, Spring Data para Azure Cosmos DB, Azure Cosmos DB e Serviço de Aplicativo Linux.
Saiba mais sobre como executar aplicativos Java no Serviço de Aplicativo no Linux no guia do desenvolvedor.
Saiba como proteger seu aplicativo com um domínio e um certificado personalizados.