Azure Uygulaması Hizmetinde Tomcat, JBoss veya Java SE uygulaması için veri kaynaklarını yapılandırma
Bu makalede App Service'te Java SE, Tomcat veya JBoss uygulamasında veri kaynaklarının nasıl yapılandırılacakları gösterilmektedir.
Azure Uygulaması Hizmeti, tam olarak yönetilen bir hizmette Java web uygulamalarını üç farklı şekilde çalıştırır:
- Java SE - Eklenmiş bir sunucu (Spring Boot, Dropwizard, Quarkus gibi) veya katıştırılmış Tomcat veya Jetty sunucusu içeren bir JAR paketi olarak dağıtılan bir uygulamayı çalıştırabilir.
- Tomcat - Yerleşik Tomcat sunucusu WAR paketi olarak dağıtılan bir uygulamayı çalıştırabilir.
- JBoss EAP - Yalnızca Premium v3 ve Yalıtılmış v2 fiyatlandırma katmanlarında Linux uygulamaları için desteklenir. Yerleşik JBoss EAP sunucusu WAR veya EAR paketi olarak dağıtılan bir uygulamayı çalıştırabilir.
Not
Spring uygulamaları için Azure Spring Apps kullanmanızı öneririz. Ancak, Azure Uygulaması Hizmetini hedef olarak kullanmaya devam edebilirsiniz. Öneri için bkz . Java İş Yükü Hedef Kılavuzu .
Veri kaynağını yapılandırma
Spring Boot uygulamalarında veri kaynaklarına bağlanmak için bağlantı dizesi oluşturmanızı ve bunları application.properties dosyanıza eklemenizi öneririz.
App Service sayfasının "Yapılandırma" bölümünde dize için bir ad ayarlayın, JDBC bağlantı dizesi değer alanına yapıştırın ve türü "Özel" olarak ayarlayın. İsteğe bağlı olarak bu bağlantı dizesi yuva ayarı olarak ayarlayabilirsiniz.
Bu bağlantı dizesi adlı bir ortam değişkeni
CUSTOMCONNSTR_<your-string-name>
olarak uygulamamız tarafından erişilebilir. Örneğin,CUSTOMCONNSTR_exampledb
.application.properties dosyanızda bu bağlantı dizesi ortam değişkeni adıyla başvurun. Örneğimizde aşağıdaki kodu kullanırız:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Daha fazla bilgi için veri erişimi ve dışlaştırılmış yapılandırmalarla ilgili Spring Boot belgelerine bakın.
İpucu
Varsayılan olarak, Linux Tomcat kapsayıcıları Tomcat sunucusunda paylaşılan veri kaynaklarını sizin için 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 ve App Service kapsayıcıda kullanılabilir uygun bir sürücü kullanarak cooresponding paylaşılan veritabanını sizin için otomatik olarak /usr/local/tomcat/conf/context.xml ekler. Bu yaklaşımı kullanan uçtan uca senaryo için bkz. Öğretici: Linux ve MySQL üzerinde Azure Uygulaması Hizmeti ile Tomcat web uygulaması derleme.
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 doldurmanız gerekir. Sağlanan, yaygın veritabanları için sınıf adlarını ve sürücü indirmelerini içeren bir tablodur.
Veritabanı | Sürücü Sınıfı Adı | JDBC Sürücüsü |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Karşıdan Yükle |
MySQL | com.mysql.jdbc.Driver |
İndir ("Platformdan Bağımsız" seçeneğini belirleyin) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Karşıdan Yükle |
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şlatma sırasında Tomcat tarafından okunan ortam değişkenini özelleştirin CATALINA_OPTS
. App Service Maven eklentisindeki bir uygulama ayarı aracılığıyla bu değerleri ayarlayın:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Alternatif olarak, Azure portalının Yapılandırma>Uygulaması Ayarları sayfasında ortam değişkenlerini de ayarlayabilirsiniz.
Ardından, veri kaynağının bir uygulamada mı yoksa Tomcat servlet'inde çalışan tüm uygulamalarda mı kullanılabilir olması gerektiğini belirleyin.
Uygulama düzeyinde veri kaynakları
Projenizin META-INF/ dizininde bir context.xml dosyası oluşturun. Yoksa META-INF/ dizini oluşturun.
context.xml'da, veri kaynağını bir
Context
JNDI adresine bağlamak için bir öğe ekleyin. Yer tutucuyudriverClassName
, yukarıdaki 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>
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üzeyindeki kaynaklar
Paylaşılan, sunucu düzeyinde bir veri kaynağı eklemek için Tomcat'in server.xml düzenlemeniz gerekir. Bunu yapmak için en güvenilir yol aşağıdaki gibidir:
- Başlangıç betiğini karşıya yükleyin ve Yapılandırma>Başlangıç Komutu'nda betiğin yolunu ayarlayın. BAŞLANGıÇ betiğini FTP kullanarak karşıya yükleyebilirsiniz.
Başlangıç betiğiniz, server.xml dosyasına bir xsl dönüşümü yapar ve sonuçta elde edilen xml dosyasını olarak /usr/local/tomcat/conf/server.xml
verir. Başlangıç betiği, apk aracılığıyla libxslt yüklemelidir. xsl dosyanız ve başlangıç betiğiniz FTP aracılığıyla karşıya yüklenebilir. Aşağıda örnek bir başlangıç betiği verilmiştir.
# 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
Aşağıdaki örnek XSL dosyası, Tomcat server.xml yeni 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(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<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>
</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ırma
Son olarak sürücü JAR'lerini Tomcat sınıf yolu'na yerleştirin ve App Service'inizi 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 sürücü JAR'ı için komutunu çalıştırın
az 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 olarak sıfırlanır CATALINA_BASE
/home/tomcat
ve güncelleştirilmiş yapılandırmayı kullanır.
Bir veri kaynağını JBoss EAP'ye kaydederken üç temel adım vardır: JDBC sürücüsünü karşıya yükleme, JDBC sürücüsünü modül olarak ekleme ve modülü kaydetme. App Service durum bilgisi olmayan bir barındırma hizmetidir, bu nedenle veri kaynağı modülünü ekleme ve kaydetmeye yönelik yapılandırma komutlarının betiklenmesi ve kapsayıcı başlatılırken uygulanması gerekir.
Veritabanınızın JDBC sürücüsünü alın.
JDBC sürücüsü için bir XML modülü tanım dosyası oluşturun. Aşağıdaki örnekte PostgreSQL için bir modül tanımı gösterilmektedir.
<?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>
JBoss CLI komutlarınızı adlı
jboss-cli-commands.cli
bir dosyaya yerleştirin. JBoss komutlarının modülü eklemesi ve veri kaynağı olarak kaydetmesi gerekir. Aşağıdaki örnekte PostgreSQL için JBoss CLI komutları gösterilmektedir.#!/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
JBoss CLI komutlarını çağıran bir başlangıç betiği
startup_script.sh
oluşturun. Aşağıdaki örnekte, öğesinin nasıl çağrılacakları gösterilmektedirjboss-cli-commands.cli
. 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/deployments/tools/jboss-cli-commands.cli
Seçtiğiniz bir FTP istemcisini kullanarak JDBC sürücünüzü,
jboss-cli-commands.cli
,startup_script.sh
ve modül tanımınızı öğesine/site/deployments/tools/
yükleyin.Kapsayıcı başlatıldığında sitenizi çalışacak
startup_script.sh
şekilde yapılandırın. Azure portalında Yapılandırma>Genel Ayarları>Başlangıç Komutu'na gidin. Başlangıç komut alanını olarak/home/site/deployments/tools/startup_script.sh
ayarlayın. Değişikliklerinizi kaydedin.
Veri kaynağının JBoss sunucusuna eklendiğini onaylamak için web uygulamanıza SSH ekleyin ve komutunu çalıştırın $JBOSS_HOME/bin/jboss-cli.sh --connect
. JBoss'a bağlandıktan sonra veri kaynaklarının /subsystem=datasources:read-resource
listesini yazdırmak için komutunu çalıştırın.
Sonraki adımlar
Azure hızlı başlangıçları, öğreticileri ve Java başvuru belgelerini bulmak için Java geliştiricileri için Azure merkezini ziyaret edin.