Condividi tramite


Usare Spring Data con Azure Cosmos DB per l'API Apache Cassandra

Questo articolo illustra il processo di compilazione, configurazione, distribuzione, risoluzione dei problemi e ridimensionamento di app Web Java nel servizio app di Azure in Linux.

Illustra l'utilizzo dei componenti seguenti:

Prerequisiti

Per seguire la procedura descritta in questo articolo, sono necessari i prerequisiti seguenti:

Importante

Per completare i passaggi descritti in questo articolo, sono necessari Spring Boot di versione 2.5 o successiva.

Clonare il repository di applicazione 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. Clonare l'app Spring Todo e copiare il contenuto della cartella prep per inizializzare il progetto:

    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. Modificare la directory nella cartella seguente nel repository clonato:

    cd initial\spring-todo-app
    

Creare un Azure Cosmos DB tramite Azure CLI

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 annotare il documentEndpoint campo 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. Ottieni le chiavi di Azure Cosmos DB, annota il valore primaryMasterKey per usi successivi.

    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>
    

    Annotazioni

    Se si vuole effettuare il provisioning di queste variabili con uno script, è disponibile un modello per Bash nella directory .prep che è possibile copiare e usare come punto di partenza.

  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

Distribuire su App Service Linux

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

  1. Apri il filepom.xml che hai copiato in precedenza nella directory iniziale/spring-todo-app del repository. Assicurarsi che il plug-in Maven per il servizio app di Azure sia incluso come illustrato nel file dipom.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 nel servizio App di 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. Accedi all'app web in esecuzione su Java SE in App Service Linux.

    https://<WEBAPP_NAME>.azurewebsites.net
    

App Spring in esecuzione nel servizio app in Linux

Risolvere i problemi relativi all'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 nel 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 remoto 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.
    

Ridimensionare l'app Spring Todo

Usare la procedura seguente per ridimensionare l'applicazione.

  1. Scalare orizzontalmente l'app Web Java utilizzando il CLI di Azure:

    az appservice plan update \
        --number-of-workers 2 \
        --name ${WEBAPP_PLAN_NAME} \
        --resource-group ${RESOURCEGROUP_NAME}
    

Passaggi successivi

Vedere anche

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

Per ulteriori informazioni sull'uso di Azure con Java, vedere i seguenti documenti: Azure for Java Developers e Lavorare con Azure DevOps e Java.

Il Spring Framework è una soluzione open source che consente agli sviluppatori Java di creare applicazioni a livello aziendale. Uno dei progetti più diffusi basati su tale piattaforma è Spring Boot, che offre un approccio semplificato per la creazione di applicazioni Java autonome. Per aiutare gli sviluppatori a iniziare a usare Spring Boot, sono disponibili diversi pacchetti Spring Boot di esempio in https://github.com/spring-guides/. Oltre a scegliere dall'elenco dei progetti Spring Boot di base, il Spring Initializr consente agli sviluppatori di iniziare a creare applicazioni Spring Boot personalizzate.