Menyebarkan aplikasi Spring ke App Service dengan MySQL
Catatan
Untuk aplikasi Spring, sebaiknya gunakan Azure Spring Apps. Namun, Anda masih dapat menggunakan Azure App Service sebagai tujuan. Untuk informasi selengkapnya, lihat Memilih layanan Azure yang tepat untuk aplikasi Java Anda.
Tutorial ini memandu Anda melalui proses membangun, mengonfigurasi, menyebarkan, memecahkan masalah, dan menskalakan aplikasi web Java di App Service Linux.
Tutorial ini dibangun di aplikasi sampel Spring PetClinic yang populer. Dalam topik ini, Anda akan menguji versi HSQLDB aplikasi secara lokal, lalu menyebarkannya ke Azure App Service. Setelah itu, Anda akan mengonfigurasi dan menyebarkan versi yang menggunakan Azure Database for MySQL. Terakhir, Anda akan mempelajari cara mengakses log aplikasi dan memperluas skala dengan meningkatkan jumlah pekerja yang menjalankan aplikasi Anda.
Prasyarat
Mendapatkan sampel
Untuk memulai aplikasi sampel, kloning dan siapkan repo sumber menggunakan perintah berikut.
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
cd spring-framework-petclinic
Membuat dan menjalankan sampel HSQLDB secara lokal
Pertama, kami akan menguji sampel secara lokal menggunakan HSQLDB sebagai database.
Buat versi HSQLDB dari aplikasi sampel.
mvn package
Selanjutnya, atur variabel lingkungan TOMCAT_HOME ke lokasi penginstalan Tomcat Anda.
export TOMCAT_HOME=<Tomcat install directory>
Kemudian, perbarui file pom.xml untuk menyebarkan file WAR. Tambahkan XML berikut sebagai turunan dari elemen <plugins>
yang ada. Jika perlu, ubah 1.9.11
ke versi Cargo Maven 3 Plugin saat ini.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.9.11</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<type>installed</type>
<home>${TOMCAT_HOME}</home>
</container>
<configuration>
<type>existing</type>
<home>${TOMCAT_HOME}</home>
</configuration>
<deployables>
<deployable>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<type>war</type>
<properties>
<context>/</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
Dengan konfigurasi ini, Anda dapat menyebarkan aplikasi secara lokal ke Tomcat.
mvn cargo:deploy
Kemudian, luncurkan Tomcat.
${TOMCAT_HOME}/bin/catalina.sh run
Sekarang Anda dapat menavigasi browser Anda ke http://localhost:8080
untuk melihat aplikasi yang sedang berjalan dan rasakan cara kerjanya. Setelah selesai, pilih Ctrl+C di perintah Bash untuk menghentikan Tomcat.
Menyebarkan ke Azure App Service
Setelah dijalankan secara lokal, kami akan menyebarkan aplikasi ke Azure.
Pertama, atur variabel lingkungan berikut. Untuk REGION
, gunakan West US 2
atau wilayah lain yang dapat Anda temukan di sini.
export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>
Maven akan menggunakan nilai-nilai ini untuk membuat sumber daya Azure dengan nama yang Anda berikan. Dengan menggunakan variabel lingkungan, Anda dapat menyimpan rahasia akun Anda dari file proyek.
Selanjutnya, perbarui file pom.xml untuk mengonfigurasi Maven untuk penyebaran Azure. Tambahkan XML berikut setelah elemen <plugin>
yang Anda tambahkan sebelumnya. Jika perlu, ubah 2.5.0
ke versi Maven Plugin untuk Azure App Service saat ini.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Kemudian, masuk ke Azure.
az login
Kemudian, sebarkan aplikasi ke App Service Linux.
mvn azure-webapp:deploy
Anda sekarang dapat menavigasikan ke https://<app-name>.azurewebsites.net
(setelah mengganti <app-name>
) untuk melihat aplikasi yang sedang berjalan.
Menyiapkan Azure Database for MySQL
Selanjutnya, kita akan beralih menggunakan MySQL, bukan HSQLDB. Kita akan membuat instans server MySQL di Azure dan menambahkan database, lalu memperbarui konfigurasi aplikasi dengan info koneksi database baru.
Pertama, atur variabel lingkungan berikut untuk digunakan di langkah selanjutnya.
export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$
Selanjutnya, buat dan inisialisasi server database. Gunakan az mysql up untuk konfigurasi awal. Kemudian gunakan set konfigurasi server mysql az untuk meningkatkan batas waktu koneksi dan mengatur zona waktu server.
az extension add --name db-up
az mysql up \
--resource-group ${RESOURCEGROUP_NAME} \
--server-name ${MYSQL_SERVER_NAME} \
--database-name ${MYSQL_DATABASE_NAME} \
--admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
--admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}
az mysql server configuration set --name wait_timeout \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value 2147483
az mysql server configuration set --name time_zone \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value=-8:00
Kemudian, gunakan MySQL CLI untuk terhubung ke database Anda di Azure.
mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME}@${MYSQL_SERVER_NAME} \
-h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p
Pada petunjuk MySQL CLI, jalankan perintah berikut untuk memverifikasi database bernama dengan nilai yang sama yang Anda tentukan sebelumnya untuk variabel lingkungan MYSQL_DATABASE_NAME
.
show databases;
MySQL siap digunakan.
Mengonfigurasi aplikasi untuk MySQL
Selanjutnya, kami akan menambahkan info koneksi ke versi aplikasi MySQL, lalu sebarkan ke App Service.
Perbarui file pom.xml untuk menjadikan MySQL sebagai konfigurasi aktif. Hapus elemen <activation>
dari profil H2 dan masukkan ke dalam profil MySQL sebagai gantinya, seperti yang ditunjukkan di sini. Sisa cuplikan menunjukkan konfigurasi yang ada. Perhatikan bagaimana variabel lingkungan yang Anda tetapkan sebelumnya digunakan oleh Maven untuk mengonfigurasi akses MySQL Anda.
<profile>
<id>MySQL</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.script>mysql</db.script>
<jpa.database>MYSQL</jpa.database>
<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
<jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
<jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}@${DOLLAR}{MYSQL_SERVER_FULL_NAME}</jdbc.username>
<jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
</properties>
...
</profile>
Selanjutnya, perbarui file pom.xml untuk mengonfigurasi Maven untuk penerapan Azure dan penggunaan MySQL. Tambahkan XML berikut setelah elemen <plugin>
yang Anda tambahkan sebelumnya. Jika perlu, ubah 2.5.0
ke versi Maven Plugin untuk Azure App Service saat ini.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<appSettings>
<property>
<name>MYSQL_SERVER_FULL_NAME</name>
<value>${MYSQL_SERVER_FULL_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
<value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_PASSWORD</name>
<value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
</property>
<property>
<name>MYSQL_DATABASE_NAME</name>
<value>${MYSQL_DATABASE_NAME}</value>
</property>
</appSettings>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Selanjutnya, buat aplikasi, lalu uji secara lokal dengan menyebarkan dan menjalankannya dengan Tomcat.
mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run
Anda sekarang dapat melihat aplikasi secara lokal di http://localhost:8080
. Aplikasi ini akan terlihat dan berperilaku sama seperti sebelumnya, tetapi menggunakan Azure Database for MySQL, bukan HSQLDB. Setelah selesai, pilih Ctrl+C di perintah Bash untuk menghentikan Tomcat.
Terakhir, sebarkan aplikasi ke App Service.
mvn azure-webapp:deploy
Anda sekarang dapat menavigasi ke https://<app-name>.azurewebsites.net
untuk melihat aplikasi yang sedang berjalan menggunakan App Service dan Azure Database for MySQL.
Mengakses log aplikasi
Jika perlu memecahkan masalah, Anda dapat melihat log aplikasi. Untuk membuka aliran log jarak jauh di komputer lokal Anda, gunakan perintah berikut.
az webapp log tail --name ${WEBAPP_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
Setelah selesai menampilkan log, pilih Ctrl+C untuk menghentikan aliran.
Aliran log juga tersedia di https://<app-name>.scm.azurewebsites.net/api/logstream
.
Peluasan skala
Untuk mendukung peningkatan lalu lintas ke aplikasi, Anda dapat menskalakan ke beberapa instans menggunakan perintah berikut.
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
Selamat! Anda membangun dan meluaskan skala aplikasi Web Java menggunakan Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux, dan Azure Database for MySQL.
Membersihkan sumber daya
Dalam bagian sebelumnya, Anda sudah membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak menggunakan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut.
az group delete --name ${RESOURCEGROUP_NAME}
Langkah berikutnya
Selanjutnya, lihat konfigurasi lain dan opsi CI/CD yang tersedia untuk Java dengan App Service.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk