Bagikan melalui


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 pada layanan yang dikelola sepenuhnya dalam tiga varian:

  • Java SE - Dapat menjalankan aplikasi yang disebarkan sebagai paket JAR yang berisi server yang disematkan (seperti Spring Boot, Dropwizard, Quarkus, atau satu dengan server Tomcat atau Jetty yang disematkan).
  • Tomcat - Server Tomcat bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket WAR.
  • JBoss EAP - Hanya didukung untuk aplikasi Linux di tingkat harga Premium v3 dan Isolated v2. Server JBoss EAP bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket WAR atau EAR.

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.

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 bagian “Konfigurasi” di halaman Azure App Service, atur nama untuk string, tempel string koneksi JDBC Anda ke bidang nilai, dan atur jenisnya ke “Kustom”. Anda dapat secara opsional mengatur string koneksi ini sebagai pengaturan slot.

    String koneksi ini dapat diakses oleh aplikasi kami sebagai variabel lingkungan yang diberi nama CUSTOMCONNSTR_<your-string-name>. Contohnya,CUSTOMCONNSTR_exampledb.

  2. Dalam file application.properties Anda, referensi string koneksi ini dengan nama variabel lingkungan. Misalnya, kami akan menggunakan kode berikut:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

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

Tip

Secara default, kontainer Linux Tomcat dapat secara otomatis mengonfigurasi sumber data bersama untuk Anda di server Tomcat. 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), dan App Service secara otomatis menambahkan database bersama cooresponding ke /usr/local/tomcat/conf/context.xml untuk Anda, menggunakan driver yang sesuai yang tersedia dalam kontainer. Untuk skenario end-to-end menggunakan pendekatan ini, lihat Tutorial: Membangun aplikasi web Tomcat dengan Azure App Service di Linux dan MySQL.

Instruksi ini berlaku untuk semua koneksi database. Anda perlu mengisi tempat penampung dengan nama kelas driver database dan file JAR yang Anda pilih. Disediakan tabel dengan nama kelas dan unduhan driver untuk database umum.

Database Nama Kelas Driver JDBC Driver
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 menggunakan Java Database Connectivity (JDBC) atau Java Persistence API (JPA), pertama, kustomisasi variabel lingkungan CATALINA_OPTS yang dibaca oleh Tomcat saat dalam keadaan start-up. Tetapkan nilai-nilai ini melalui pengaturan aplikasi di plugin Maven Azure App Service:

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

Atau atur variabel lingkungan di halaman Pengaturan Aplikasi>Konfigurasi di portal Azure.

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

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 tempat penampung driverClassName dengan nama kelas driver Anda dari tabel di atas.

    <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

Menambahkan sumber data tingkat server bersama mengharuskan Anda mengedit server.xml Tomcat. Cara yang paling dapat diandalkan untuk melakukan ini adalah sebagai berikut:

  1. Unggah skrip startup dan atur jalur ke skrip di Perintah Startup Konfigurasi>. Anda dapat mengunggah skrip startup menggunakan FTP.

Skrip startup Anda membuat transformasi xsl ke file server.xml dan menghasilkan file xml yang dihasilkan ke /usr/local/tomcat/conf/server.xml. Skrip startup harus memasang libxslt melalui apk. File xsl dan skrip startup Anda dapat diunggah melalui FTP. Di bawah adalah contoh skrip startup.

# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt

# 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 Connnector if there's 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

Akhirnya, kami akan menempatkan driver JAR di classpath Tomcat dan menghidupkan ulang Azure App Service Anda.

  1. 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.

Ada tiga langkah inti saat mendaftarkan sumber data dengan JBoss EAP: mengunggah driver JDBC, menambah driver JDBC sebagai modul, dan mendaftarkan modul. Azure App Service adalah layanan hosting tanpa status, sehingga perintah konfigurasi untuk menambahkan dan mendaftarkan modul sumber data harus ditulis dan diterapkan saat kontainer dimulai.

  1. Dapatkan driver JDBC database Anda.

  2. Buat file definisi modul XML untuk driver JDBC. Contoh berikut menunjukkan definisi modul untuk PostgreSQL.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. Masukkan perintah JBoss CLI Anda ke dalam file yang diberi nama jboss-cli-commands.cli. Perintah JBoss harus menambah modul dan mendaftarkannya sebagai sumber data. Contoh berikut menunjukkan perintah JBoss CLI untuk PostgreSQL.

    #!/usr/bin/env bash
    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. Buat skrip startup, startup_script.sh yang memanggil perintah CLI JBoss. Contoh berikut menunjukkan cara memanggil Anda jboss-cli-commands.cli. Nantinya, Anda akan mengonfigurasi App Service untuk menjalankan skrip ini saat kontainer dimulai.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Menggunakan klien FTP pilihan Anda, unggah driver JDBC Anda, jboss-cli-commands.cli, startup_script.sh, dan definisi modul ke /site/deployments/tools/.

  6. Konfigurasikan situs Anda untuk dijalankan startup_script.sh saat kontainer dimulai. Di portal Microsoft Azure, navigasi ke Konfigurasi>Pengaturan Umum>Perintah Startup. Atur bidang perintah startup ke /home/site/deployments/tools/startup_script.sh. Simpan perubahan Anda.

Untuk mengonfirmasi bahwa datasource ditambahkan ke server JBoss, SSH ke webapp 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.

Langkah berikutnya

Kunjungi pusat Azure for Java Developers untuk menemukan mulai cepat Azure, tutorial, dan dokumentasi referensi Java.