Condividi tramite


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:

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.

  1. 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
    
  2. 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.

  1. Accedere all'interfaccia della riga di comando di Azure e impostare l'ID sottoscrizione.

    az login
    
  2. Impostare l'ID sottoscrizione, se necessario.

    az account set -s <your-subscription-id>
    
  3. 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>
    
  4. 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
    
  5. 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.

  1. 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.

  2. Modificare la directory usando il comando seguente:

    cd initial/spring-todo-app
    
  3. Eseguire l'app Spring Todo in locale con il comando seguente:

    mvn package spring-boot:run
    
  4. Dopo l'avvio dell'applicazione, è possibile convalidare la distribuzione accedendo all'app Spring Todo qui: http://localhost:8080/.

    App Spring in esecuzione in locale

Eseguire la distribuzione nel Servizio app in Linux

La procedura seguente distribuisce l'applicazione in Linux in Azure.

  1. 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>
    
  2. 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] ------------------------------------------------------------------------
    
  3. Passare all'app Web in esecuzione in Java SE in Servizio app in Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

App Spring in esecuzione in Servizio app in Linux

Risolvere i problemi dell'app Spring Todo in Azure visualizzando i log

La procedura seguente apre i file di log in Azure.

  1. 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
    
  2. 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.

  1. 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

Vedi anche

Per altre informazioni sull'uso delle applicazioni Spring Boot in Azure, vedere gli articoli seguenti:

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.