Usare Spring Data con Azure Cosmos DB per l'API Apache Cassandra
Questo articolo illustra la procedura per compilare, configurare, distribuire e ridimensionare le app Web Java in Servizio app in Linux, oltre che per risolvere i problemi.
Verrà dimostrato l'utilizzo dei componenti seguenti:
Prerequisiti
I prerequisiti seguenti sono necessari per seguire le procedure disponibili in questo articolo:
- Per distribuire un'app Web Java nel cloud, è necessaria una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, è possibile attivare i vantaggi per i sottoscrittori di MSDN oppure iscriversi per ottenere un account Azure gratuito.
- Interfaccia della riga di comando di Azure 2.0
- Java 8 JDK
- Maven 3
Importante
Spring Boot versione 2.5 o successiva è necessario per completare i passaggi descritti in questo articolo.
Clonare il repository di app Web Java di esempio
Per questo esercizio si userà l'app Spring Todo, che è un'applicazione Java creata con Spring Boot, Spring Data per Azure Cosmos DB e Azure Cosmos DB.
Per inizializzare il progetto, clonare l'app Spring Todo e copiare il contenuto della cartella con estensione prep:
Per Bash:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git yes | cp -rf .prep/* .
Per 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
Passare alla cartella seguente nel repository clonato:
cd initial\spring-todo-app
Creare un'istanza di Azure Cosmos DB dall'interfaccia della riga di comando di Azure
La procedura seguente crea un database di Azure Cosmos DB usando l'interfaccia della riga di comando.
Accedere all'interfaccia della riga di comando di Azure e impostare l'ID sottoscrizione.
az login
Impostare l'ID sottoscrizione, se necessario.
az account set -s <your-subscription-id>
Creare un gruppo di risorse di Azure e salvare il nome del gruppo di risorse per usarlo in un secondo momento.
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
Creare Azure Cosmos DB e specificare il tipo come GlobalDocumentDB. Il nome di Azure Cosmos DB deve usare solo lettere minuscole. Assicurarsi di prendere nota del contenuto del campo
documentEndpoint
nella risposta, Questo valore sarà necessario in un secondo momento.az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Ottenere le chiavi di Azure Cosmos DB e prendere nota del valore di
primaryMasterKey
per uso futuro.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
Compilare ed eseguire l'app in locale
La procedura seguente esegue l'applicazione nel computer di sviluppo.
Nella console preferita configurare le variabili di ambiente illustrate nelle sezioni di codice seguenti con le informazioni di connessione di Azure e Azure Cosmos DB raccolte in precedenza in questo articolo. È necessario specificare un nome univoco per WEBAPP_NAME e un valore per le variabili REGION .
Per 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>
Per Windows (prompt dei comandi):
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 si preferisce eseguire il provisioning di queste variabili con uno script, è disponibile un modello per Bash nella directory prep che è possibile copiare e usare come punto iniziale.
Modificare la directory usando il comando seguente:
cd initial/spring-todo-app
Eseguire l'app Spring Todo in locale con il comando seguente:
mvn package spring-boot:run
Dopo l'avvio dell'applicazione, è possibile convalidare la distribuzione accedendo all'app Spring Todo qui:
http://localhost:8080/
.
Eseguire la distribuzione nel Servizio app in Linux
La procedura seguente distribuisce l'applicazione in Linux in Azure.
Aprire il file pom.xml copiato in precedenza nella directory iniziale/spring-todo-app del repository. Assicurarsi che il plug-in Maven per app Azure servizio sia incluso come illustrato nel file di pom.xml seguente. Se la versione non è impostata su 1.14.0, aggiornare il valore.
<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>
Eseguire la distribuzione in Java SE in Servizio app in 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] ------------------------------------------------------------------------
Passare all'app Web in esecuzione in Java SE in Servizio app in Linux:
https://<WEBAPP_NAME>.azurewebsites.net
Risolvere i problemi dell'app Spring Todo in Azure visualizzando i log
La procedura seguente apre i file di log in Azure.
Configurare i log per l'app Web Java distribuita in Servizio app di Azure in Linux:
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
Aprire il flusso di log remoti dell'app Web Java da un computer locale:
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.
Aumentare le istanze dell'app Spring Todo
Usare la procedura seguente per ridimensionare l'applicazione.
Aumentare le istanze dell'app Web Java con l'interfaccia della riga di comando di Azure:
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
Passaggi successivi
- Guida dello sviluppatore Java per il servizio app in Linux
- Azure per sviluppatori Java Per altre informazioni su Spring e Azure, passare al centro di documentazione di Spring in Azure.
Vedi anche
Per altre informazioni sull'uso delle applicazioni Spring Boot in Azure, vedere gli articoli seguenti:
Distribuire un'applicazione Spring Boot in Linux nel Servizio app di Azure
Eseguire un'applicazione Spring Boot in un cluster Kubernetes nel servizio Azure Container
Per altre informazioni sull'uso di Azure con Java, vedere Azure per sviluppatori Java e la documentazione relativa all'uso di Azure DevOps e Java.
Spring Framework è una soluzione open source che consente agli sviluppatori Java di creare applicazioni di livello enterprise. Uno dei progetti più comuni che si basa su questa piattaforma è Spring Boot, che fornisce un approccio semplificato per la creazione di applicazioni Java autonome. Per semplificare le operazioni iniziali con Spring Boot per gli sviluppatori, diversi pacchetti Spring Boot di esempio sono disponibili all'indirizzo https://github.com/spring-guides/. Oltre a consentire di scegliere dall'elenco di progetti Spring Boot di base, Spring Initializr semplifica le operazioni iniziali degli sviluppatori per la creazione di applicazioni Spring Boot personalizzate.