Partager via


Utiliser Spring Data avec l’API Azure Cosmos DB pour Apache Cassandra

Cet article va vous guider lors du processus de génération, de configuration, de déploiement, de dépannage et de mise à l’échelle des applications web Java dans Azure App Service sur Linux.

Il illustre l’utilisation des composants suivants :

Prérequis

Pour suivre les étapes décrites dans cet article, vous devez disposer des éléments suivants :

Important

Spring Boot version 2.5 ou ultérieure est nécessaire pour effectuer les étapes décrites dans cet article.

Cloner le référentiel d’exemple d’application web Java

Pour cet exercice, vous allez utiliser l’application Spring Todo, qui est une application Java créée à l’aide de Spring Boot, Spring Data pour Azure Cosmos DB et Azure Cosmos DB.

  1. Clonez l’application Spring Todo et copiez le contenu du dossier .prep pour initialiser le projet :

    Pour bash :

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    yes | cp -rf .prep/* .
    

    Pour 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. Basculez vers le dossier suivant dans le référentiel cloné :

    cd initial\spring-todo-app
    

Créer une base de données Azure Cosmos DB à partir d’Azure CLI

La procédure suivante crée une base de données Azure Cosmos DB à l’aide de l’interface CLI.

  1. Connectez-vous à votre interface De ligne de commande Azure et définissez votre ID d’abonnement.

    az login
    
  2. Définissez l’ID d’abonnement si nécessaire.

    az account set -s <your-subscription-id>
    
  3. Créez un groupe de ressources Azure et enregistrez le nom du groupe de ressources pour une utilisation ultérieure.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Créez Azure Cosmos DB et spécifiez le type en tant que GlobalDocumentDB. Le nom d’Azure Cosmos DB doit utiliser uniquement des lettres minuscules. Veillez à noter le champ documentEndpoint dans la réponse. Vous aurez besoin de cette valeur ultérieurement.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Obtenez vos clés Azure Cosmos DB. Prenez note de la valeur primaryMasterKey, car vous en aurez besoin plus tard.

    az cosmosdb keys list \
        --resource-group <your-azure-group-name> \
        --name <your-azure-COSMOSDB-name>
    

Générer et exécuter l’application localement

La procédure suivante permet d’exécuter l’application sur l’ordinateur de développement.

  1. Dans votre console de choix, configurez les variables d’environnement indiquées dans les sections de code suivantes avec les informations de connexion Azure et Azure Cosmos DB que vous avez collectées précédemment dans cet article. Vous devez fournir un nom unique pour WEBAPP_NAME et la valeur des variables REGION .

    Pour 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>
    

    Pour Windows (invite de commandes) :

    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>
    

    Remarque

    Si vous souhaitez configurer ces variables avec un script, il existe un modèle pour Bash dans le répertoire .prep que vous pouvez copier et utiliser comme point de départ.

  2. Modifiez le répertoire à l’aide de la commande suivante :

    cd initial/spring-todo-app
    
  3. Exécutez l’application Spring Todo localement avec la commande suivante :

    mvn package spring-boot:run
    
  4. Une fois l’application démarrée, vous pouvez valider le déploiement en accédant à l’application Spring Todo ici : http://localhost:8080/.

    Application Spring exécutée localement

Déployer sur App Service Linux

La procédure suivante permet de déployer l’application sur Linux dans Azure.

  1. Ouvrez le fichier pom.xml que vous avez précédemment copié dans le répertoire initial/spring-todo-app du référentiel. Vérifiez que le plug-in Maven pour Azure App Service est inclus comme indiqué dans le fichier pom.xml suivant. Si la version n’est pas définie sur 1.14.0, mettez à jour la valeur.

    <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. Déployer sur Java SE dans App Service 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. Accédez à votre application web exécutée sur Java SE dans App Service Linux :

    https://<WEBAPP_NAME>.azurewebsites.net
    

Application Spring exécutée dans App Service sur Linux

Résoudre les problèmes liés à l’application Spring Todo sur Azure en consultant les journaux

La procédure suivante permet d’ouvrir les fichiers journaux dans Azure.

  1. Configurez les journaux pour l’application web Java déployée dans Azure App Service dans Linux :

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. Ouvrez le flux de journaux à distance de l’application web Java à partir d’un ordinateur 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.
    

Scale-out de l’application Spring Todo

Utilisez la procédure suivante pour mettre à l’échelle l’application.

  1. Effectuer un scale-out d’une application web Java à l’aide d’Azure CLI :

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

Étapes suivantes

Voir aussi

Pour plus d’informations sur l’utilisation d’applications Spring Boot sur Azure, consultez les articles suivants :

Pour plus d’informations sur l’utilisation d’Azure avec Java, renseignez-vous sur Azure pour les développeurs Java et l’utilisation d’Azure DevOps et Java.

Spring Framework est une solution open source qui aide les développeurs Java à créer des applications d’entreprise. L’un des projets les plus connus basés sur cette plateforme est Spring Boot, qui fournit une approche simplifiée pour la création d’applications Java autonomes. Pour aider les développeurs à bien démarrer avec Spring Boot, plusieurs exemples de packages Spring Boot sont disponibles à l’adresse https://github.com/spring-guides/. En plus de choisir dans la liste des projets Spring Boot de base, Spring Initializr aide les développeurs à commencer à créer des applications Spring Boot personnalisées.