Tutorial: Membangun aplikasi web Java Spring Boot dengan Azure App Service di Linux dan Azure Cosmos DB

Catatan

Untuk aplikasi Spring, sebaiknya gunakan Azure Spring Apps. Namun, Anda masih dapat menggunakan Azure App Service sebagai tujuan. Lihat Panduan Tujuan Beban Kerja Java untuk saran.

Tutorial ini memandu Anda melalui proses membangun, mengonfigurasi, menyebarkan, dan menskalakan aplikasi web Java di Azure. Saat selesai, Anda akan melihat aplikasi Spring Boot menyimpan data di dalam Azure Cosmos DB yang berjalan di Azure App Service pada Linux.

Aplikasi Spring Boot menyimpan data di Azure Cosmos DB

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat database Azure Cosmos DB.
  • Menyambungkan aplikasi sampel ke database dan mengujinya secara lokal
  • Menyebarkan aplikasi sampel ke Azure
  • Mengalirkan log diagnostik dari App Service
  • Menambahkan instans tambahan untuk memperluas skala aplikasi sampel

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Melakukan kloning aplikasi TODO sampel dan siapkan repositori

Tutorial ini menggunakan contoh aplikasi daftar TODO dengan UI web yang memanggil Spring REST API yang didukung oleh Spring Data untuk Azure Cosmos DB. Kode untuk aplikasi tersedia di GitHub. Untuk mempelajari selengkapnya tentang menulis aplikasi Java menggunakan Spring dan Azure Cosmos DB, lihat Spring Boot Starter dengan tutorial Azure Cosmos DB for NoSQL dan mulai cepat Spring Data for Azure Cosmos DB.

Jalankan perintah berikut pada terminal Anda untuk mengkloning repositori sampel dan menyiapkan lingkungan aplikasi sampel.

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
yes | cp -rf .prep/* .

Membuat akun Azure Cosmos DB

Ikuti langkah-langkah ini untuk membuat database Azure Cosmos DB pada langganan Anda. Aplikasi daftar TODO akan terhubung ke database ini dan menyimpan datanya saat berjalan, bertahan dalam status aplikasi di mana pun Anda menjalankan aplikasi tersebut.

  1. Masuk ke Azure CLI Anda, dan atur langganan Anda secara opsional jika Anda memiliki lebih dari satu yang tersambung ke info masuk Anda.

    az login
    az account set -s <your-subscription-id>
    
  2. Buat Grup Sumber Daya Azure, mencatat nama grup sumber daya.

    az group create -n <your-azure-group-name> \
        -l <your-resource-group-region>
    
  3. Buat Azure Cosmos DB dengan jenis GlobalDocumentDB. Nama instans Azure Cosmos DB hanya boleh menggunakan huruf kecil. Perhatikan bidang documentEndpoint dalam respons dari perintah.

    az cosmosdb create --kind GlobalDocumentDB \
        -g <your-azure-group-name> \
        -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
    
  4. Dapatkan kunci Azure Cosmos DB untuk terhubung ke aplikasi. Simpan primaryMasterKey, documentEndpoint karena Anda akan memerlukannya di langkah selanjutnya.

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

Konfigurasikan properti aplikasi TODO

Buka terminal pada komputer Anda. Salin file skrip sampel di repositori kloning sehingga Anda dapat menyesuaikannya untuk database Azure Cosmos DB yang baru saja Anda buat.

cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh

Edit .scripts/set-env-variables.sh di editor favorit Anda dan berikan info koneksi Azure Cosmos DB. Untuk konfigurasi App Service Linux, gunakan wilayah yang sama seperti sebelumnya (your-resource-group-region) dan grup sumber daya (your-azure-group-name) yang digunakan saat membuat database Azure Cosmos DB. Pilih WEBAPP_NAME unik karena tidak dapat menduplikasi nama aplikasi web apa pun di semua penyebaran Azure.

export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>

# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>

Lalu, jalankan skrip:

source .scripts/set-env-variables.sh

Variabel lingkungan ini digunakan dalam application.properties di aplikasi daftar TODO. Bidang dalam file properti menyiapkan konfigurasi repositori default untuk Spring Data:

azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}

Kemudian aplikasi sampel menggunakan @Document anotasi yang diimpor dari com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document untuk menyiapkan jenis entitas yang akan disimpan dan dikelola oleh Azure Cosmos DB:

@Document
public class TodoItem {
    private String id;
    private String description;
    private String owner;
    private boolean finished;

Menjalankan contoh aplikasi

Gunakan Maven untuk menjalankan sampel.

mvn package spring-boot:run

Output akan terlihat seperti di bawah ini.

bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 


[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101  INFO 7673 --- [           main] c.m.azure.documentdb.DocumentClient      : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)

Anda dapat mengakses Aplikasi Spring TODO secara lokal menggunakan tautan ini setelah aplikasi dimulai: http://localhost:8080/.

Mengakses aplikasi Spring TODO secara lokal

Jika Anda melihat pengecualian alih-alih pesan "Started TodoApplication", pastikan skrip bash pada langkah sebelumnya mengekspor variabel lingkungan dengan benar dan bahwa nilainya benar untuk database Azure Cosmos DB yang Anda buat.

Mengonfigurasi penyebaran Azure

Buka file pom.xml di dalam direktori initial/spring-boot-todo dan tambahkan konfigurasi Azure Web App Plugin for Maven berikut.

<plugins> 

    <!--*************************************************-->
    <!-- Deploy to Java SE in App Service Linux           -->
    <!--*************************************************-->
       
    <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>2.5.0</version>
        <configuration>
            <schemaVersion>v2</schemaVersion>

            <!-- 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>COSMOSDB_URI</name>
                    <value>${COSMOSDB_URI}</value>
                </property> 
                <property>
                    <name>COSMOSDB_KEY</name>
                    <value>${COSMOSDB_KEY}</value>
                </property>
                <property>
                    <name>COSMOSDB_DBNAME</name>
                    <value>${COSMOSDB_DBNAME}</value>
                </property>
                <property>
                    <name>JAVA_OPTS</name>
                    <value>-Dserver.port=80</value>
                </property>
            </appSettings>

        </configuration>
    </plugin>           
    ...
</plugins>

Menyebarkan ke App Service pada Linux

Gunakan tujuan mvn azure-webapp:deploy Maven untuk menyebarkan aplikasi TODO ke Azure App Service di Linux.


# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[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:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------

Output berisi URL ke aplikasi yang Anda sebarkan (dalam contoh ini, https://spring-todo-app.azurewebsites.net ). Anda dapat menyalin URL ini ke browser web atau menjalankan perintah berikut di jendela Terminal untuk memuat aplikasi Anda.

explorer https://spring-todo-app.azurewebsites.net

Anda akan melihat aplikasi yang berjalan dengan URL jarak jauh di bilah alamat:

Aplikasi Spring Boot berjalan dengan URL jarak jauh

Mengalirkan log diagnostik

Untuk mengakses log konsol yang dihasilkan dari dalam kode aplikasi Anda di App Service, aktifkan pembuatan log diagnostik dengan menjalankan perintah berikut di Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Nilai yang mungkin untuk --level adalah: Error, Warning, Info, dan Verbose. Setiap level berikutnya mencakup level sebelumnya. Misalnya: Error hanya menyertakan pesan kesalahan, dan Verbose menyertakan semua pesan.

Setelah pembuatan log diagnostik diaktifkan, jalankan perintah berikut untuk melihat aliran log:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.

Catatan

Anda juga dapat memeriksa file log dari browser di https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Untuk menghentikan streaming log kapan saja, ketikkan Ctrl+C.

Menskalakan Aplikasi TODO

Perluas skala aplikasi dengan menambahkan pekerja lain:

az appservice plan update --number-of-workers 2 \
   --name ${WEBAPP_PLAN_NAME} \
   --resource-group <your-azure-group-name>

Membersihkan sumber daya

Jika Anda tidak memerlukan sumber daya ini untuk tutorial lain (lihat Langkah berikutnya), Anda dapat menghapusnya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name <your-azure-group-name> --yes

Langkah berikutnya

Azure untuk PengembangJava Spring Boot, Spring Data untuk Azure Cosmos DB, Azure Cosmos DB , dan App Service Linux.

Pelajari lebih lanjut tentang menjalankan aplikasi Java di App Service pada Linux dalam panduan pengembang.

Pelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.