Mengonfigurasi sumber data untuk aplikasi Tomcat, JBoss, atau Java SE di Azure App Service

Artikel ini memperlihatkan cara mengonfigurasi sumber data di aplikasi Java SE, Tomcat, atau JBoss di App Service.

Azure App Service menjalankan aplikasi web Java dalam tiga jenis pada layanan yang dikelola sepenuhnya:

  • Java Standard Edition (SE). Java SE dapat menjalankan aplikasi yang disebarkan sebagai paket arsip Java (JAR) yang berisi server yang disematkan, seperti Spring Boot, Quarkus, Dropwizard, atau aplikasi dengan server Tomcat atau Jetty yang disematkan.
  • Tomcat. Server Tomcat bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket arsip aplikasi web (WAR).
  • JBoss Enterprise Application Platform (EAP): Server JBoss EAP bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket WAR atau arsip perusahaan (EAR). Opsi ini didukung untuk aplikasi Linux dalam serangkaian tingkat harga yang mencakup Gratis, Premium v3, dan Terisolasi v2.

Nota

JBoss EAP di App Service sekarang mendukung penagihan Bring Your Own License (BYOL). BYOL memungkinkan pelanggan yang memiliki langganan Red Hat yang ada untuk menerapkan lisensi tersebut langsung ke penyebaran JBoss EAP mereka di Azure App Service. Untuk informasi selengkapnya, lihat Dukungan BYOL untuk JBoss EAP di App Service.

Konfigurasikan sumber data

Untuk terhubung ke sumber data di aplikasi Spring Boot, kami menyarankan untuk membuat string koneksi dan menyuntikkannya ke file application.properties Anda.

  1. Di panel kiri halaman App Service, pilih Pengaturan>Variabel lingkungan. Pada tab String koneksi , pilih Tambahkan. Atur Nama untuk string, tempelkan string koneksi JDBC Anda ke bidang Nilai , dan atur Jenis ke Kustom. Anda dapat secara opsional mengatur string koneksi sebagai pengaturan slot.

    String koneksi dapat diakses oleh aplikasi Anda sebagai variabel lingkungan bernama CUSTOMCONNSTR_<your-string-name>. Contohnya,CUSTOMCONNSTR_exampledb.

  2. Dalam file application.properties Anda, referensikan string koneksi dengan nama variabel lingkungan. Untuk contoh sebelumnya, Anda akan menggunakan kode ini:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Untuk informasi selengkapnya, lihat dokumentasi Spring Boot tentang akses data dan konfigurasi eksternal.

Petunjuk / Saran

Kontainer Linux Tomcat dapat secara otomatis mengonfigurasi sumber data bersama di server Tomcat jika Anda mengatur variabel WEBSITE_AUTOCONFIGURE_DATABASE lingkungan ke true. Satu-satunya hal yang harus Anda lakukan adalah menambahkan pengaturan aplikasi yang berisi string koneksi JDBC yang valid ke database Oracle, SQL Server, PostgreSQL, atau MySQL (termasuk kredensial koneksi). App Service secara otomatis menambahkan database bersama yang sesuai ke /usr/local/tomcat/conf/context.xml, menggunakan driver yang sesuai yang tersedia dalam kontainer. Untuk skenario end-to-end yang menggunakan pendekatan ini, lihat Tutorial: Membuat aplikasi web Tomcat dengan Azure App Service di Linux dan MySQL.

Instruksi ini berlaku untuk semua koneksi database. Anda perlu mengganti placeholder dengan nama kelas driver dari database dan file JAR yang Anda pilih. Tabel berikut ini menyediakan nama kelas dan unduhan driver untuk database umum.

Basis data Nama kelas driver Penggerak JDBC
PostgreSQL org.postgresql.Driver Unduh
MySQL com.mysql.jdbc.Driver Unduh (Pilih Platform Independen.)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Unduh

Untuk mengonfigurasi Tomcat untuk menggunakan Java Database Connectivity (JDBC) atau Java Persistence API (JPA), pertama-tama sesuaikan CATALINA_OPTS variabel lingkungan yang dibaca oleh Tomcat saat startup. Atur nilai ini dengan menggunakan pengaturan aplikasi di plugin App Service Maven:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

Atau atur variabel lingkungan pada tab Pengaturan aplikasi dari halamanvariabel Lingkungan> di portal Microsoft Azure.

Selanjutnya, tentukan apakah sumber data harus tersedia untuk satu aplikasi atau ke semua aplikasi yang berjalan pada servlet Tomcat.

Sumber data tingkat aplikasi

Untuk mengonfigurasi sumber data tingkat aplikasi:

  1. Buat file context.xml di direktori META-INF/ proyek Anda. Buat direktori META-INF/ jika tidak ada.

  2. Di context.xml, tambahkan elemen Context untuk menautkan sumber data ke alamat JNDI. Ganti driverClassName dengan nama kelas driver Anda dari tabel yang muncul sebelumnya di artikel ini.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Perbarui aplikasi web.xml untuk menggunakan sumber data di aplikasi Anda.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

Sumber daya tingkat server bersama

Petunjuk / Saran

Kontainer Linux Tomcat dapat secara otomatis menerapkan file XSLT dengan menggunakan konvensi berikut untuk file yang disalin ke /home/site/wwwroot: Jika server.xml.xsl atau server.xml.xslt ada, file diterapkan ke Tomcat server.xml. Jika context.xml.xsl atau context.xml.xslt ada, file tersebut akan diterapkan pada Tomcat context.xml.

Menambahkan sumber data tingkat server bersama mengharuskan Anda mengedit Tomcat's server.xml. Karena perubahan file di luar /home direktori bersifat sementara, perubahan pada file konfigurasi Tomcat perlu diterapkan secara terprogram, sebagai berikut:

  • Unggah skrip startup dan atur jalur ke skrip diKonfigurasi>. Pada tab Pengaturan tumpukan , tambahkan jalur di kotak perintah Startup . Anda dapat mengunggah skrip startup dengan menggunakan FTP.

Skrip startup Anda membuat transformasi XSL ke server.xml file dan menghasilkan file XML yang dihasilkan ke /usr/local/tomcat/conf/server.xml. Skrip startup harus menginstal libxslt atau xlstproc, tergantung pada distribusi versi Tomcat aplikasi web Anda, seperti yang disebutkan dalam komentar dalam contoh skrip berikut. Anda dapat menggunakan FTP untuk mengunggah file XSL dan skrip startup Anda.

# Install the libxslt package on Alpine-based images:
apk add --update libxslt

# Install the xsltproc package on Debian or Ubuntu-based images:
apt install xsltproc

# Also copy the transform file to /home/tomcat/conf/
# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml

Contoh file XSL berikut menambahkan simpul konektor baru ke server.xml Tomcat.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()" name="Copy">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()" mode="insertConnector">
    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                 contains(., '&lt;Connector') and
                                 (contains(., 'scheme=&quot;https&quot;') or
                                  contains(., &quot;scheme='https'&quot;))]">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                   comment()[contains(., '&lt;Connector') and
                                             (contains(., 'scheme=&quot;https&quot;') or
                                              contains(., &quot;scheme='https'&quot;))]
                                  )]
                      ">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="insertConnector" />
    </xsl:copy>
  </xsl:template>

  <!-- Add the new connector after the last existing connector if there is one -->
  <xsl:template match="Connector[last()]" mode="insertConnector">
    <xsl:call-template name="Copy" />

    <xsl:call-template name="AddConnector" />
  </xsl:template>

  <!-- ... or before the first engine if there's no existing connector -->
  <xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
                mode="insertConnector">
    <xsl:call-template name="AddConnector" />

    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template name="AddConnector">
    <!-- Add new line -->
    <xsl:text>&#xa;</xsl:text>
    <!-- This is the new connector -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

Menyelesaikan konfigurasi

Terakhir, letakkan JAR driver di classpath Tomcat dan mulai ulang aplikasi App Service Anda.

  • Pastikan bahwa file driver JDBC tersedia untuk classloader Tomcat dengan menempatkannya di direktori /home/site/lib . Di Cloud Shell, jalankan az webapp deploy --type=lib untuk setiap JAR driver:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Jika Anda membuat sumber data tingkat server, hidupkan ulang aplikasi Azure App Service Linux. Tomcat mengatur ulang CATALINA_BASE ke /home/tomcat dan menggunakan konfigurasi yang diperbarui.

Petunjuk / Saran

Secara default, kontainer Linux JBoss dapat secara otomatis mengonfigurasi sumber data bersama di server JBoss. Satu-satunya hal yang perlu Anda lakukan adalah menambahkan pengaturan aplikasi yang berisi string koneksi JDBC yang valid ke database Oracle, SQL Server, PostgreSQL, atau MySQL (termasuk info masuk koneksi), dan tambahkan pengaturan aplikasi / variabel WEBSITE_AUTOCONFIGURE_DATABASE lingkungan dengan nilai true. Koneksi JDBC yang dibuat dengan konektor layanan juga didukung. App Service secara otomatis menambahkan sumber data bersama yang sesuai (berdasarkan nama pengaturan aplikasi dan akhiran _DS), menggunakan driver yang sesuai yang tersedia dalam kontainer. Untuk skenario end-to-end yang menggunakan pendekatan ini, lihat Tutorial: Membuat aplikasi web JBoss dengan Azure App Service di Linux dan MySQL.

Ada tiga langkah utama untuk mendaftarkan sumber data dengan JBoss EAP:

  1. Unggah driver JDBC.
  2. Tambahkan driver JDBC sebagai modul.
  3. Tambahkan sumber data dengan modul .

App Service adalah layanan hosting stateless, jadi Anda perlu memasukkan langkah-langkah ini ke dalam skrip startup dan menjalankannya setiap kali kontainer JBoss dimulai. Berikut adalah contoh PostgreSQL, MySQL, dan Azure SQL Database:

Nota

JBoss EAP di App Service mendukung penagihan Bring Your Own License (BYOL). BYOL memungkinkan pelanggan yang memiliki langganan Red Hat yang ada untuk menerapkan lisensi tersebut langsung ke penyebaran JBoss EAP mereka di Azure App Service. Untuk informasi selengkapnya, lihat Dukungan BYOL untuk JBoss EAP.

  1. Masukkan perintah JBoss CLI Anda ke dalam file yang diberi namajboss-cli-commands.cli. Perintah JBoss harus menambah modul dan mendaftarkannya sebagai sumber data. Contoh berikut menunjukkan perintah JBoss CLI untuk membuat sumber data PostgreSQL dengan nama java:jboss/datasources/postgresDSJNDI .

    module add --name=org.postgresql --resources=/home/site/libs/postgresql-42.7.4.jar
    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name="postgresql",driver-module-name="org.postgresql",driver-class-name="org.postgresql.Driver",driver-xa-datasource-class-name="org.postgresql.xa.PGXADataSource")
    data-source add --name=postgresql --driver-name="postgresql" --jndi-name="java:jboss/datasources/postgresDS" --connection-url="jdbc:postgresql://\${env.DB_HOST}:5432/postgres" --user-name="\${env.DB_USERNAME}" --password="\${env.DB_PASSWORD}" --enabled=true --use-java-context=true
    

    Perhatikan bahwa module add perintah menggunakan tiga variabel lingkungan (DB_HOST, , DB_USERNAMEdan DB_PASSWORD), yang harus Anda tambahkan di App Service sebagai pengaturan aplikasi. Skrip menambahkannya tanpa --resolve-parameter-values bendera sehingga JBoss tidak menyimpan nilainya dalam teks biasa.

  2. Buat skrip startup, startup.sh, yang memanggil perintah JBoss CLI. Contoh berikut menunjukkan cara memanggil file jboss-cli-commands.cli Anda. Nantinya, Anda mengonfigurasi App Service untuk menjalankan skrip ini saat kontainer dimulai.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss-cli-commands.cli
    
  3. Menggunakan opsi penyebaran pilihan Anda, unggah driver JDBC, jboss-cli-commands.cli, dan startup.sh ke jalur yang ditentukan dalam skrip masing-masing. Unggah startup.sh sebagai file startup. Contohnya:

    export RESOURCE_GROUP_NAME=<resource-group-name>
    export APP_NAME=<app-name>
    
    # The lib type uploads to /home/site/libs by default.
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path postgresql-42.7.4.jar --target-path postgresql-42.7.4.jar --type lib
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path jboss-cli-commands.cli --target-path /home/site/scripts/jboss-cli-commands.cli --type static
    # The startup type uploads to /home/site/scripts/startup.sh by default.
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path startup.sh --type startup
    

    Untuk informasi selengkapnya, lihat Menyebarkan file ke App Service.

Untuk mengonfirmasi bahwa sumber data ditambahkan ke server JBoss, SSH ke aplikasi web Anda dan jalankan $JBOSS_HOME/bin/jboss-cli.sh --connect. Setelah Anda tersambung ke JBoss, jalankan /subsystem=datasources:read-resource untuk mencetak daftar sumber data.

Sesuai definisi dalam jboss-cli-commands.cli, Anda dapat mengakses koneksi PostgreSQL menggunakan nama java:jboss/datasources/postgresDSJNDI .