Używanie rozwiązania Spring Data z usługą Azure Cosmos DB dla interfejsu API Apache Cassandra

W tym artykule omówimy proces kompilowania, konfigurowania, wdrażania, rozwiązywania problemów i skalowania aplikacji internetowych w języku Java w usłudze Azure App Service dla systemu Linux.

Zademonstrujemy sposób użycia następujących składników:

Wymagania wstępne

Aby wykonać czynności opisane w tym artykule, wymagane są:

Ważne

Do wykonania kroków opisanych w tym artykule jest wymagany program Spring Boot w wersji 2.5 lub nowszej.

Klonowanie przykładowego repozytorium aplikacji internetowych w języku Java

W tym ćwiczeniu będziesz używać aplikacji Spring Todo, która jest aplikacją Java utworzoną przy użyciu platformy Spring Boot, Spring Data dla usług Azure Cosmos DB i Azure Cosmos DB.

  1. Sklonuj aplikację Spring Todo i skopiuj zawartość folderu .prep, aby zainicjować projekt:

    W przypadku środowiska powłoki Bash:

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

    Dla systemu 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. Zmień katalog na następujący folder w sklonowanym repozytorium:

    cd initial\spring-todo-app
    

Tworzenie usługi Azure Cosmos DB z poziomu interfejsu wiersza polecenia platformy Azure

Poniższa procedura tworzy bazę danych usługi Azure Cosmos DB przy użyciu interfejsu wiersza polecenia.

  1. Zaloguj się do interfejsu wiersza polecenia platformy Azure i ustaw identyfikator subskrypcji.

    az login
    
  2. W razie potrzeby ustaw identyfikator subskrypcji.

    az account set -s <your-subscription-id>
    
  3. Utwórz grupę zasobów platformy Azure i zapisz nazwę grupy zasobów do późniejszego użycia.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Utwórz usługę Azure Cosmos DB i określ typ globaldocumentDB. Nazwa usługi Azure Cosmos DB musi używać tylko małych liter. Pamiętaj, aby zanotować pole documentEndpoint w odpowiedzi. Ta wartość będzie potrzebna później.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Pobierz klucze usługi Azure Cosmos DB, zapisz wartość primaryMasterKey do późniejszego użycia.

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

Lokalne kompilowanie i uruchamianie aplikacji

Poniższa procedura umożliwia uruchomienie aplikacji na komputerze deweloperskim.

  1. W wybranej konsoli skonfiguruj zmienne środowiskowe przedstawione w poniższych sekcjach kodu przy użyciu informacji o połączeniu platformy Azure i usługi Azure Cosmos DB zebranych wcześniej w tym artykule. Musisz podać unikatową nazwę WEBAPP_NAME i wartość zmiennych REGION.

    W przypadku systemu Linux (powłoka 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>
    

    W przypadku systemu Windows (wiersz polecenia):

    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>
    

    Uwaga

    Jeśli chcesz aprowizować te zmienne za pomocą skryptu, w katalogu .prep znajduje się szablon dla powłoki Bash, który możesz skopiować, aby używać go jako punktu początkowego.

  2. Zmień katalog przy użyciu następującego polecenia:

    cd initial/spring-todo-app
    
  3. Uruchom lokalnie aplikację Spring Todo za pomocą następującego polecenia:

    mvn package spring-boot:run
    
  4. Po uruchomieniu aplikacji możesz zweryfikować wdrożenie, korzystając z aplikacji Spring Todo tutaj: http://localhost:8080/.

    Aplikacja Spring działająca w środowisku lokalnym

Wdrażanie w usłudze App Service w systemie Linux

Poniższa procedura służy do wdrażania aplikacji w systemie Linux na platformie Azure.

  1. Otwórz wcześniej skopiowany plik pom.xml do katalogu initial/spring-todo-app repozytorium. Upewnij się, że wtyczka Maven dla usługi aplikacja systemu Azure jest uwzględniona w poniższym pliku pom.xml. Jeśli wersja nie jest ustawiona na 1.14.0, zaktualizuj wartość.

    <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. Wdrażanie w środowisku Java SE w usłudze App Service dla systemu 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. Przejdź do aplikacji internetowej działającej w środowisku Java SE w usłudze App Service dla systemu Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

Aplikacja Spring działająca w usłudze App Service w systemie Linux

Rozwiązywanie problemów z aplikacją Spring Todo na platformie Azure z pomocą przeglądania dzienników

Poniższa procedura otwiera pliki dzienników na platformie Azure.

  1. Skonfiguruj dzienniki dla wdrożonej aplikacji internetowej Java w usłudze Azure App Service w systemie Linux:

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. Otwórz zdalny strumień dzienników aplikacji internetowej Java z poziomu komputera lokalnego:

    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.
    

Skalowanie w poziomie aplikacji Spring Todo

Aby przeskalować aplikację, wykonaj poniższą procedurę.

  1. Skalowanie aplikacji internetowej w języku Java przy użyciu interfejsu wiersza polecenia platformy Azure:

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

Następne kroki

  • Java in App Service Linux dev guide (Przewodnik dla deweloperów dotyczący języka Java w usłudze App Service dla systemu Linux)
  • Azure for Java Developers (Platforma Azure dla deweloperów języka Java) Aby dowiedzieć się więcej na temat oprogramowania Spring i platformy Azure, przejdź do centrum dokumentacji dotyczącej oprogramowania Spring na platformie Azure.

Zobacz też

Aby uzyskać więcej informacji o korzystaniu z aplikacji Spring Boot na platformie Azure, zobacz następujące artykuły:

Aby uzyskać więcej informacji na temat korzystania z platformy Azure przy użyciu języka Java, zapoznaj się z tematami Platforma Azure dla deweloperów języka Java oraz Praca z narzędziami Azure DevOps i językiem Java.

Platforma Spring jest rozwiązaniem open-source, które pomaga deweloperom języka Java tworzyć aplikacje na poziomie przedsiębiorstwa. Jednym z bardziej popularnych projektów opartych na tej platformie jest Spring Boot, który oferuje uproszczoną metodę tworzenia autonomicznych aplikacji Java. Aby ułatwić deweloperom rozpoczęcie pracy z aplikacją Spring Boot, pod adresem https://github.com/spring-guides/ udostępniono przykładowe pakiety aplikacji Spring Boot. Oprócz możliwości wyboru z listy podstawowych projektów Spring Boot narzędzie Spring Initializr pomaga deweloperom rozpocząć tworzenie niestandardowych aplikacji Spring Boot.