Freigeben über


Verwenden von Spring Data mit Azure Cosmos DB für Apache Cassandra API

In diesem Artikel erfahren Sie Schritt für Schritt, wie Sie Java-Web-Apps in Azure App Service für Linux erstellen, konfigurieren, bereitstellen, skalieren und Probleme behandeln.

Dabei wird die Verwendung folgender Komponenten veranschaulicht:

Voraussetzungen

Für die Durchführung der Schritte in diesem Artikel müssen folgende Voraussetzungen erfüllt sein:

Wichtig

Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Artikel auszuführen.

Klonen des Repositorys für die exemplarische Java-Web-App

Für diese Übung verwenden Sie die Spring Todo-App, eine Java-Anwendung, die mit Spring Boot, Spring Data für Azure Cosmos DB und Azure Cosmos DB erstellt wurde.

  1. Klonen Sie die Spring-Todo-App, und kopieren Sie den Inhalt des Ordners .prep, um das Projekt zu initialisieren:

    Bash:

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

    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. Ändern Sie das Verzeichnis in den folgenden Ordner des geklonten Repositorys:

    cd initial\spring-todo-app
    

Erstellen einer Azure Cosmos DB-Instanz über die Azure-Befehlszeilenschnittstelle

Im folgenden Verfahren wird die Azure Cosmos DB-Datenbank mit CLI erstellt.

  1. Melden Sie sich bei Ihrer Azure CLI an, und legen Sie Ihre Abonnement-ID fest.

    az login
    
  2. Legen Sie bei Bedarf die Abonnement-ID fest.

    az account set -s <your-subscription-id>
    
  3. Erstellen Sie eine Azure-Ressourcengruppe, und speichern Sie den Ressourcengruppennamen für die spätere Verwendung.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Erstellen Sie azure Cosmos DB, und geben Sie den Typ als GlobalDocumentDB an. Der Name der Azure Cosmos DB darf nur Kleinbuchstaben verwenden. Notieren Sie sich den Wert des Felds documentEndpoint aus der Antwort. Sie benötigen diesen Wert später noch.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Rufen Sie Ihre Azure Cosmos DB-Schlüssel ab, und notieren Sie sich den Wert primaryMasterKey für später.

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

Lokales Erstellen und Ausführen der App

Mit dem folgenden Verfahren wird die Anwendung auf dem Entwicklungscomputer ausgeführt:

  1. Konfigurieren Sie in Ihrer Wahlkonsole die Umgebungsvariablen, die in den folgenden Codeabschnitten mit den Zuvor in diesem Artikel gesammelten Azure- und Azure Cosmos DB-Verbindungsinformationen angezeigt werden. Sie müssen einen eindeutigen Namen für WEBAPP_NAME und Wert für die REGION-Variablen angeben.

    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>
    

    Windows (Eingabeaufforderung):

    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>
    

    Hinweis

    Falls Sie diese Variablen mit einem Skript bereitstellen möchten, finden Sie im Verzeichnis „.prep“ eine Vorlage für Bash, die Sie kopieren und als Grundlage verwenden können.

  2. Ändern Sie das Verzeichnis mithilfe des folgenden Befehls:

    cd initial/spring-todo-app
    
  3. Führen Sie die Spring-Todo-App mithilfe des folgenden Befehls lokal aus:

    mvn package spring-boot:run
    
  4. Nachdem die Anwendung gestartet wurde, können Sie die Bereitstellung überprüfen, indem Sie hier auf die Spring Todo-App zugreifen: http://localhost:8080/

    Lokal ausgeführte Spring-App

Bereitstellen für App Service (Linux)

Mit dem folgenden Verfahren wird die Anwendung für Linux in Azure bereitgestellt:

  1. Öffnen Sie die pom.xml Datei, die Sie zuvor in das ursprüngliche/spring-todo-app-Verzeichnis des Repositorys kopiert haben. Stellen Sie sicher, dass das Maven-Plug-In für Azure-App Service enthalten ist, wie in der folgenden pom.xml Datei zu sehen ist. Wenn die Version nicht auf 1.14.0 festgelegt ist, aktualisieren Sie den Wert.

    <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. Führen Sie die Bereitstellung für Java SE in App Service (Linux) durch.

    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. Navigieren Sie zu Ihrer Web-App, die unter Java SE in App Service (Linux) ausgeführt wird:

    https://<WEBAPP_NAME>.azurewebsites.net
    

In App Service unter Linux ausgeführte Spring-App

Behandeln von Problemen mit der Spring-Todo-App in Azure anhand von Protokollen

Mit dem folgenden Verfahren werden Protokolldateien in Azure geöffnet:

  1. Konfigurieren Sie Protokolle für die bereitgestellte Java-Web-App in Azure App Service unter Linux:

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. Öffnen Sie den Remoteprotokollstream der Java-Web-App von einem lokalen Computer aus:

    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.
    

Aufskalieren der Spring-Todo-App

Gehen Sie zum Skalieren der Anwendung wie folgt vor:

  1. Skalieren Sie die Java-Web-App über die Azure-Befehlszeilenschnittstelle auf:

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

Nächste Schritte

Weitere Informationen

Weitere Informationen zur Verwendung von Spring Boot-Anwendungen in Azure finden Sie in den folgenden Artikeln:

Weitere Informationen zur Verwendung von Azure mit Java finden Sie unter Azure für Java-Entwickler und Working with Azure DevOps and Java (Arbeiten mit Azure DevOps und Java).

Spring Framework ist eine Open Source-Lösung, die Java-Entwickler bei der Erstellung professioneller Anwendungen unterstützt. Eines der gängigsten Projekte, das auf dieser Plattform aufbaut, ist Spring Boot. Es bietet einen vereinfachten Ansatz für das Erstellen eigenständiger Java-Anwendungen. Um Entwicklern den Einstieg in Spring Boot zu vereinfachen, werden unter https://github.com/spring-guides/ mehrere Spring Boot-Beispielpakete bereitgestellt. Neben der Auswahl einer Liste grundlegender Spring Boot-Projekte ermöglicht Spring Initializr Entwicklern einen einfacheren Einstieg bei der Erstellung von benutzerdefinierten Spring Boot-Anwendungen.