Azure App Service'te Tomcat, JBoss veya Java SE uygulaması için veri kaynaklarını yapılandırma

Bu makalede, App Service'de bir Java SE, Tomcat veya JBoss uygulamasında veri kaynaklarının nasıl yapılandırılacağı gösterilmektedir.

Azure App Service, tam olarak yönetilen bir hizmette Java web uygulamalarını üç türde çalıştırır:

  • Java Standard Edition (SE). Java SE; Spring Boot, Quarkus, Dropwizard gibi ekli bir sunucu içeren bir Java arşiv (JAR) paketi olarak dağıtılan bir uygulamayı ya da katıştırılmış Tomcat veya Jetty sunucusuna sahip bir uygulamayı çalıştırabilir.
  • Tomcat. Yerleşik Tomcat sunucusu, web uygulaması arşiv (WAR) paketi olarak dağıtılan bir uygulamayı çalıştırabilir.
  • JBoss Kurumsal Uygulama Platformu (EAP): Yerleşik JBoss EAP sunucusu, WAR veya kurumsal arşiv (EAR) paketi olarak dağıtılan bir uygulamayı çalıştırabilir. Bu seçenek Ücretsiz, Premium v3 ve Yalıtılmış v2 içeren bir dizi fiyatlandırma katmanındaki Linux uygulamaları için desteklenir.

Uyarı

App Service'te JBoss EAP artık Kendi Lisansını Getir (KLG) faturalamayı destekliyor. BYOL, mevcut Red Hat aboneliklerine sahip olan müşterilerin bu lisansları doğrudan Azure App Service'teki JBoss EAP dağıtımlarına uygulamalarına olanak tanır. Daha fazla bilgi için bkz. App Service'te JBoss EAP için KLG Desteği.

Veri kaynağını yapılandırma

Spring Boot uygulamalarındaki veri kaynaklarına bağlanmak için bağlantı dizeleri oluşturmanızı ve bunları application.properties dosyanıza eklemenizi öneririz.

  1. App Service sayfasının sol bölmesinde Ayarlar>Ortam değişkenleri'ni seçin. Bağlantı dizeleri sekmesinde Ekle'yi seçin. Dize için bir Ad ayarlayın, JDBC bağlantı dizenizi Değer alanına yapıştırın ve Tür değerini Özel olarak ayarlayın. İsteğe bağlı olarak bağlantı dizesini yuva ayarı olarak ayarlayabilirsiniz.

    Bağlantı dizesine, adlı CUSTOMCONNSTR_<your-string-name>bir ortam değişkeni olarak uygulamanız tarafından erişilebilir. Örneğin, CUSTOMCONNSTR_exampledb.

  2. application.properties dosyanızda, ortam değişkeni adıyla bağlantı dizesine başvurun. Yukarıdaki örnekte şu kodu kullanacaksınız:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Daha fazla bilgi için bkz. Veri erişimi ve dışlanmış yapılandırmaile ilgili Spring Boot belgeleri.

Tavsiye

Ortam değişkenini WEBSITE_AUTOCONFIGURE_DATABASEtrueolarak ayarlarsanız Linux Tomcat kapsayıcıları, Tomcat sunucusunda paylaşılan veri kaynaklarını otomatik olarak yapılandırabilir. Tek yapmanız gereken Oracle, SQL Server, PostgreSQL veya MySQL veritabanına (bağlantı kimlik bilgileri dahil) geçerli bir JDBC bağlantı dizesi içeren bir uygulama ayarı eklemektir. App Service, kapsayıcıda kullanılabilir uygun bir sürücü kullanarak ilgili paylaşılan veritabanını /usr/local/tomcat/conf/context.xmlöğesine otomatik olarak ekler. Bu yaklaşımı kullanan uçtan uca senaryo için bkz. Öğretici: Linux üzerinde ve MySQL ile Azure App Service kullanarak bir Tomcat web uygulaması oluşturma.

Bu yönergeler tüm veritabanı bağlantıları için geçerlidir. Yer tutucuları seçtiğiniz veritabanının sürücü sınıfı adı ve JAR dosyasıyla değiştirmeniz gerekir. Aşağıdaki tabloda, yaygın veritabanları için sınıf adları ve sürücü indirmeleri sağlanmaktadır.

Veritabanı Sürücü sınıfı adı JDBC sürücüsü
PostgreSQL org.postgresql.Driver İndirme
MySQL com.mysql.jdbc.Driver İndir ( Platformdan Bağımsız'ı seçin.)
SQL Sunucusu com.microsoft.sqlserver.jdbc.SQLServerDriver İndirme

Tomcat'i Java Veritabanı Bağlantısı (JDBC) veya Java Kalıcılık API'sini (JPA) kullanacak şekilde yapılandırmak için ilk olarak başlangıçta Tomcat tarafından okunan ortam değişkenini özelleştirin CATALINA_OPTS . App Service Maven eklentisinde bir uygulama ayarı kullanarak bu değeri ayarlayın:

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

Alternatif olarak, Azure portalındaki Ayarlar Ortam değişkenleri sayfasının > sekmesinde ortamdeğişkenini de ayarlayabilirsiniz.

Ardından, veri kaynağının bir uygulama için mi yoksa Tomcat servlet'inde çalışan tüm uygulamalar için mi kullanılabilir olacağını belirleyin.

Uygulama düzeyi veri kaynakları

Uygulama düzeyinde veri kaynağını yapılandırmak için:

  1. Projenizin META-INF/ dizininde bir context.xml dosyası oluşturun. Eğer yoksa META-INF/ dizinini oluşturun.

  2. context.xmlbölümünde, veri kaynağını bir JNDI adresine bağlamak için bir Context öğe ekleyin. driverClassName yer tutucusunu, bu makalede daha önce gösterilen tablodan sürücünüzün sınıf adıyla değiştirin.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Uygulamanızdaki veri kaynağını kullanmak için uygulamanızın web.xml güncelleştirin.

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

Paylaşılan sunucu düzeyi kaynaklar

Tavsiye

Linux Tomcat kapsayıcıları, /home/site/wwwroot'a kopyalanan dosyalar için aşağıdaki kuralı kullanarak XSLT dosyalarını otomatik olarak uygulayabilir: server.xml.xsl veya server.xml.xslt mevcutsa, dosyalar Tomcat'in server.xml öğesine uygulanır. Eğer context.xml.xsl veya context.xml.xslt varsa, dosyalar Tomcat'in context.xml öğesine uygulanır.

Paylaşılan, sunucu düzeyinde bir veri kaynağı eklemek için Tomcat'in server.xmlöğesini düzenlemeniz gerekir. Dizin dışındaki /home dosya değişiklikleri kısa ömürlü olduğundan, Tomcat'in yapılandırma dosyalarındaki değişikliklerin programlı olarak uygulanması gerekir:

  • Başlangıç betiğini yükleyin ve Ayarlar>Yapılandırma'da betiğin yolunu ayarlayın. Yığın ayarları sekmesinde Başlangıç komut kutusuna yolu ekleyin. BAŞLANGıÇ betiğini FTP kullanarak karşıya yükleyebilirsiniz.

Başlangıç betiğiniz XSL dönüşümü dosyasına uygular ve ortaya çıkan XML dosyasını /usr/local/tomcat/conf/server.xml olarak verir. Başlangıç betiği, web uygulamanızın Tomcat sürümünün dağıtımına bağlı olarak libxslt veya xlstproc yüklemelidir, aşağıdaki örnek betikteki yorumda belirtildiği gibi. XSL dosyanızı ve başlangıç betiğinizi yüklemek için FTP kullanabilirsiniz.

# 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

Aşağıdaki örnek XSL dosyası, Tomcat server.xmlyeni bir bağlayıcı düğümü ekler.

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

Yapılandırmayı sonlandırın

Son olarak sürücü JAR'lerini Tomcat sınıf yolu'na yerleştirin ve App Service uygulamanızı yeniden başlatın.

  • JDBC sürücü dosyalarını /home/site/lib dizinine yerleştirerek Tomcat sınıf yükleyicisi tarafından kullanılabilir olduğundan emin olun. Cloud Shell'de her bir sürücü JAR için komutu çalıştırınaz webapp deploy --type=lib:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Sunucu düzeyinde bir veri kaynağı oluşturduysanız, App Service Linux uygulamasını yeniden başlatın. Tomcat, CATALINA_BASE'yi /home/tomcat olarak sıfırlar ve güncellenmiş yapılandırmayı kullanır.

Tavsiye

Varsayılan olarak, Linux JBoss kapsayıcıları JBoss sunucusunda paylaşılan veri kaynaklarını otomatik olarak yapılandırabilir. Yapmanız gereken tek şey Oracle, SQL Server, PostgreSQL veya MySQL veritabanına (bağlantı kimlik bilgileri dahil) geçerli bir JDBC bağlantı dizesi içeren bir uygulama ayarı eklemek ve değeriyle WEBSITE_AUTOCONFIGURE_DATABASEuygulama ayarını /ortam değişkenini true eklemektir. Hizmet bağlayıcısı ile oluşturulan JDBC bağlantıları da desteklenir. App Service, kapsayıcıda kullanılabilir uygun bir sürücü kullanarak ilgili paylaşılan veri kaynağını (uygulama ayarı adına ve son ekine _DSgöre) otomatik olarak ekler. Bu yaklaşımı kullanan uçtan uca bir senaryo için, Tutorial: Azure App Service üzerinde Linux ve MySQL ile JBoss web uygulaması oluşturma başlığına bakın.

JBoss EAP'ye veri kaynağı kaydetmenin üç ana adımı vardır:

  1. JDBC sürücüsünü yükleyin.
  2. JDBC sürücüsünü bir modül olarak ekleyin.
  3. Modülle bir veri kaynağı ekleyin.

App Service durum bilgisi olmayan bir barındırma hizmetidir, bu nedenle bu adımları bir başlangıç betiğine yerleştirmeniz ve JBoss kapsayıcısı her başlatıldığında çalıştırmanız gerekir. PostgreSQL, MySQL ve Azure SQL Veritabanı örnekleri şunlardır:

Uyarı

App Service'te JBoss EAP, Kendi Lisansınızı Getirin (BYOL) faturalamayı destekler. BYOL, mevcut Red Hat aboneliklerine sahip olan müşterilerin bu lisansları doğrudan Azure App Service'teki JBoss EAP dağıtımlarına uygulamalarına olanak tanır. Daha fazla bilgi için bkz. JBoss EAP için BYOL Desteği.

  1. JBoss CLI komutlarınızı jboss-cli-commands.cli adlı bir dosyaya yerleştirin. JBoss komutlarının modülü eklemesi ve veri kaynağı olarak kaydetmesi gerekir. Aşağıdaki örnek, JNDI adıyla java:jboss/datasources/postgresDSbir PostgreSQL veri kaynağı oluşturmak için JBoss CLI komutlarını gösterir.

    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
    

    Komutun, App Service'e module add uygulama ayarları olarak eklemeniz gereken üç ortam değişkeni (DB_HOST, DB_USERNAME, ve DB_PASSWORD) kullandığını unutmayın. Komut dosyası bunları --resolve-parameter-values bayrağı olmadan ekler, böylece JBoss değerlerini düz metin olarak kaydetmez.

  2. JBoss CLI komutlarını çağıran bir başlangıç betiği (startup.sh) oluşturun. Aşağıdaki örnekte jboss-cli-commands.cli dosyanızı çağırma gösterilmektedir. Daha sonra App Service'i kapsayıcı başlatıldığında bu betiği çalıştıracak şekilde yapılandıracaksınız.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss-cli-commands.cli
    
  3. Tercih ettiğiniz bir dağıtım seçeneğini kullanarak, JDBC sürücünüzü, jboss-cli-commands.cli ve startup.sh ilgili betiklerde belirtilen yollara yükleyin. startup.sh başlangıç dosyası olarak karşıya yükleyin. Örneğin:

    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
    

    Daha fazla bilgi için bkz App Service'e dosyaları dağıtma.

Veri kaynağının JBoss sunucusuna eklendiğini onaylamak için web uygulamanıza SSH yazın ve komutunu çalıştırın $JBOSS_HOME/bin/jboss-cli.sh --connect. JBoss'a bağlandıktan sonra komutunu çalıştırarak /subsystem=datasources:read-resource veri kaynaklarının listesini yazdırın.

jboss-cli-commands.cli dosyasındaki tanım gereği, JNDI adını java:jboss/datasources/postgresDSkullanarak PostgreSQL bağlantısına erişebilirsiniz.