Cara menggunakan Spring dan Cosmos DB dengan App Service di Linux

Tutorial ini memandu Anda melalui proses membangun, mengonfigurasi, menyebarkan, memecahkan masalah, dan menskalakan aplikasi Web Java di Azure App Service.

Tutorial ini akan menunjukkan penggunaan komponen-komponen berikut:

Prasyarat

Prasyarat berikut diperlukan untuk menyelesaikan langkah-langkah dalam artikel ini:

Penting

Spring Boot versi 2.5 atau 2.6 diperlukan untuk menyelesaikan langkah-langkah dalam artikel ini.

Mengklon Repositori Aplikasi Web Java Sampel

Untuk latihan ini Anda akan menggunakan aplikasi Spring Todo, yang merupakan aplikasi Java yang dibangun menggunakan Spring Boot, Spring Data untuk Cosmos DB, dan Azure Cosmos DB.

  1. Kloning aplikasi Spring Todo dan salin isi folder .prep untuk menginisialisasi proyek:

    Untuk bash:

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

    Untuk 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. Ubah direktori ke folder berikut di repositori yang dikloning:

    cd initial\spring-todo-app
    

Membuat Azure Cosmos DB dari Azure CLI

Prosedur berikut membuat database Azure Cosmos menggunakan CLI.

  1. Masuk ke Azure CLI Anda, dan atur ID langganan Anda.

    az login
    
  2. Atur ID langganan jika diperlukan.

    az account set -s <your-subscription-id>
    
  3. Buat grup sumber daya Azure, dan tuliskan nama grup sumber daya untuk digunakan nanti.

    az group create -n <your-azure-group-name> \
    -l <your-resource-group-region>
    
  4. Buat Cosmos DB dan tentukan jenisnya sebagai GlobalDocumentDB. Nama Cosmos DB hanya boleh menggunakan huruf kecil. Pastikan untuk mencatat bidang documentEndpoint pada respons. Anda akan membutuhkan ini nanti.

    az cosmosdb create --kind GlobalDocumentDB \
        -g <your-azure-group-name> \
        -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
    
  5. Dapatkan kunci Azure Cosmos DB Anda, catat nilai primaryMasterKey untuk digunakan nanti.

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

Membangun dan Menjalankan Aplikasi secara Lokal

Prosedur berikut menjalankan aplikasi pada komputer pengembangan.

  1. Di dalam konsol pilihan Anda, konfigurasikan variabel lingkungan yang ditampilkan di bagian kode berikut dengan informasi koneksi Azure dan Cosmos DB yang Anda kumpulkan sebelumnya di artikel ini. Anda harus memberikan nama unik untuk WEBAPP_NAME dan nilai untuk variabel REGION.

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

Untuk Windows (Prompt Perintah):

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>

Catatan

Jika Anda ingin menyediakan variabel-variabel ini dengan skrip, ada template untuk Bash di direktori .prep yang dapat Anda salin dan gunakan sebagai titik awal.

  1. Ubah direktori ke yang berikut:

    cd initial/spring-todo-app
    
  2. Jalankan aplikasi Spring Todo secara lokal dengan perintah berikut:

    mvn package spring-boot:run
    
  3. Setelah aplikasi dimulai, Anda dapat memvalidasi penyebaran dengan mengakses aplikasi Spring Todo di sini: http://localhost:8080/.

Spring app running locally

Menyebarkan ke App Service Linux

Prosedur berikut menyebarkan aplikasi ke Linux di Azure.

  1. Buka file pom.xml yang sebelumnya Anda salin ke direktori intial/spring-tofo-app dari repositori. Pastikan Plugin Maven untuk Azure App Service disertakan seperti yang terlihat pada file pom.xml di bawah ini. Jika versi tidak diatur ke 1.14.0 maka perbarui nilainya.
<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. Sebarkan ke Java SE di 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] ------------------------------------------------------------------------
  1. Telusuri aplikasi web Anda yang berjalan di Java SE di App Service Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

Spring app running in App Service on Linux

Memecahkan masalah Aplikasi Spring Todo di Azure dengan Melihat Log

Prosedur berikut membuka file log di Azure.

  1. Konfigurasikan log untuk aplikasi Java Web yang disebarkan di Azure App Service di Linux:

    az webapp log config --name ${WEBAPP_NAME} \
     --resource-group ${RESOURCEGROUP_NAME} \
     --web-server-logging filesystem
    
  2. Buka aliran log jarak jauh aplikasi Java Web dari mesin lokal:

    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. Setelah selesai, Anda dapat memeriksa hasil Anda terhadap kode di e2e-java-experience-in-app-service-linux-part-2/complete.

Memperkecil Aplikasi Spring Todo

Gunakan prosedur berikut untuk mengubah ukuran skala aplikasi.

  1. Perkecil aplikasi Java Web menggunakan Azure CLI:

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

Langkah berikutnya

Sumber Daya Tambahan

Untuk informasi selengkapnya tentang menggunakan aplikasi Spring Boot di Azure, lihat artikel berikut:

Untuk mengetahui informasi selengkapnya tentang cara menggunakan Azure dengan Java, lihat Azure for Java Developers dan Bekerja dengan Azure DevOps dan Java.

Spring Framework adalah solusi sumber terbuka yang membantu pengembang Java membuat aplikasi tingkat perusahaan. Salah satu proyek yang lebih populer yang dibangun di atas platform tersebut adalah Spring Boot, yang menyediakan pendekatan sederhana untuk membuat aplikasi Java yang mandiri. Untuk membantu pengembang memulai dengan Spring Boot, beberapa contoh paket Spring Boot tersedia di https://github.com/spring-guides/. Selain memilih dari daftar proyek Spring Boot dasar, Spring Initializr membantu pengembang memulai dengan membuat aplikasi Spring Boot kustom.