A Spring és a Cosmos DB használata a Linuxos App Service-szel

Ez az cikk bemutatja a Java-webalkalmazások a Linuxos Azure App Service-ben történő buildelését, konfigurálását, üzembe helyezését, hibaelhárítását és méretezését.

A következő összetevők használatát mutatja be:

Előfeltételek

A cikkben leírt lépések elvégzéséhez a következő előfeltételek szükségesek:

Fontos

A cikkben ismertetett lépések elvégzéséhez a Spring Boot 2.5-ös vagy 2.6-os verziója szükséges.

A mintául szolgáló Java-webalkalmazás adattárának klónozása

Ehhez a gyakorlathoz a Spring Todo alkalmazást fogja használni, amely egy Spring Boot, Spring Data for Cosmos DB és Azure Cosmos DB használatával létrehozott Java-alkalmazás.

  1. Klónozza a Spring Todo alkalmazást, majd másolja a .prep mappa tartalmát a projekt inicializálásához:

    Bash esetén:

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

    Windows esetén:

    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. Módosítsa a könyvtárat a klónozott adattár következő mappájára:

    cd initial\spring-todo-app
    

Azure Cosmos DB létrehozása az Azure CLI-vel

Az alábbi eljárás egy Azure Cosmos-adatbázist hoz létre a CLI használatával.

  1. Jelentkezzen be az Azure CLI-be, és állítsa be az előfizetés azonosítóját.

    az login
    
  2. Szükség esetén állítsa be az előfizetés azonosítóját.

    az account set -s <your-subscription-id>
    
  3. Hozzon létre egy Azure-erőforráscsoportot, és jegyezze fel az erőforráscsoport nevét későbbi használatra.

    az group create -n <your-azure-group-name> \
    -l <your-resource-group-region>
    
  4. Hozza létre a Cosmos DB-t, majd adja meg a típust GlobalDocumentDB elemként. A Cosmos DB neve csak kisbetűket tartalmazhat. Jegyezze fel a válasz documentEndpoint mezőjét. Később szüksége lesz rá.

    az cosmosdb create --kind GlobalDocumentDB \
        -g <your-azure-group-name> \
        -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
    
  5. Szerezze be Azure Cosmos DB kulcsait, és jegyezze fel a primaryMasterKey értéket későbbi használatra.

    az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
    

Az alkalmazás létrehozása és futtatása helyben

A következő eljárás a fejlesztői számítógépen futtatja az alkalmazást.

  1. A választott konzolon konfigurálja a következő kódrészletekben látható környezeti változókat a cikkben már összegyűjtött Azure-beli és Cosmos DB-kapcsolati adatokkal. A WEBAPP_NAME és a REGION változókhoz meg kell adnia egy egyedi nevet.

Linux (Bash) esetén:

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 (parancssor) esetén:

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>

Megjegyzés

Ha szkripttel szeretné kiépíteni ezeket a változókat, akkor a .prep könyvtárban található Bash-sablont vágólapra másolhatja és kiindulópontként használhatja.

  1. Módosítsa a könyvtárat a következőre:

    cd initial/spring-todo-app
    
  2. Futtassa a Spring Todo alkalmazást helyileg a következő paranccsal:

    mvn package spring-boot:run
    
  3. Az alkalmazás elindítása után a Spring Todo alkalmazás eléréséhez itt ellenőrizheti az üzembe helyezést: http://localhost:8080/.

Spring app running locally

Üzembe helyezés a Linuxos App Service-ben

Az alábbi eljárás az üzembe helyezi az alkalmazást a Linux rendszeren az Azure-ban.

  1. Nyissa meg az adattár initial/spring-todo-app könyvtárába másolt pom.xml fájlt. Az alábbi fájl alapján győződjön meg arról, hogy a fájl tartalmazza a Maven Plugin for Azure App Service beépülő modult. Ha a verzió nincs 1.14.0-ra állítva, frissítse az értéket.
<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>
  1. Üzembe helyezés Java SE környezetben a Linuxos App Service-ben

    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] ------------------------------------------------------------------------
  1. Tallózással keresse meg a Linuxos App Service-beli Java SE környezetben futó webalkalmazást:

    https://<WEBAPP_NAME>.azurewebsites.net
    

Spring app running in App Service on Linux

Az Azure-beli Spring Todo alkalmazás hibaelhárítása a naplók megtekintésével

Az alábbi eljárás naplófájlokat nyit meg az Azure-ban.

  1. Konfigurálja az üzemelő Java-webalkalmazás naplóit a Linuxos Azure App Service-ben:

    az webapp log config --name ${WEBAPP_NAME} \
     --resource-group ${RESOURCEGROUP_NAME} \
     --web-server-logging filesystem
    
  2. Nyissa meg a Java-webalkalmazás távoli naplóstreamjét egy helyi gépen:

    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.
  1. Ha elkészült, megtekintheti az eredményeket a kódban az e2e-java-experience-in-app-service-linux-part-2/complete területen.

A Spring Todo alkalmazás horizontális felskálázása

Kövesse az alábbi eljárást az alkalmazás skálázásához.

  1. A Java-webalkalmazás horizontális felskálázása az Azure CLI-vel:

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

Következő lépések

További források

A Spring Boot-alkalmazások Azure-beli használatával kapcsolatban további információt az alábbi cikkben olvashat:

Az Azure a Javával való együttes használatáról további információt az Azure Java-fejlesztőknek és Az Azure DevOps és a Java használata című cikkben találhat.

A Spring Framework egy nyílt forráskódú megoldás, amely lehetővé teszi a Java-fejlesztők számára, hogy nagyvállalati szintű alkalmazásokat hozzanak létre. A platformra épülő népszerűbb projektek egyike a Spring Boot, amely egyszerűbbé teszi a különálló Java-alkalmazások létrehozását. A Spring Boot használatának megkezdéséhez a fejlesztők segítségére lehetnek a mintául szolgáló Spring Boot-csomagok, amelyek itt érhetők el: https://github.com/spring-guides/. A választható alapszintű Spring Boot-projekteken kívül a Spring Initializr is segítséget nyújt a fejlesztőknek az egyéni Spring Boot-alkalmazások létrehozásának első lépéseiben.