تكوين مصادر البيانات لتطبيق Tomcat أو JBoss أو Java SE في Azure App Service
توضح هذه المقالة كيفية تكوين مصادر البيانات في تطبيق Java SE أو Tomcat أو JBoss في App Service.
تقوم Azure App Service بتشغيل تطبيقات ويب Java على خدمة مدارة بالكامل في ثلاثة متغيرات:
- Java SE - يمكنه تشغيل تطبيق تم نشره كحزمة JAR تحتوي على خادم مضمن (مثل Spring Boot أو Dropwizard أو Quarkus أو تطبيق مع خادم Tomcat أو Jetty مضمن).
- Tomcat - يمكن لخادم Tomcat المضمن تشغيل تطبيق تم نشره كحزمة WAR.
- JBoss EAP - مدعوم لتطبيقات Linux في مستويات التسعير Free وPremium v3 و Isolated v2 فقط. يمكن لخادم JBoss EAP المضمن تشغيل تطبيق تم نشره كحزمة WAR أو EAR.
إشعار
بالنسبة لتطبيقات Spring، نوصي باستخدام Azure Spring Apps. ومع ذلك، لا يزال بإمكانك استخدام Azure App Service كوجهة. راجع إرشادات وجهة حمل عمل Java للحصول على المشورة.
تكوين مصدر البيانات
للاتصال بمصادر البيانات في تطبيقات Spring Boot، نقترح إنشاء سلاسل اتصال وتضمينها في ملف application.properties الموجود لديك.
في مقطع "التكوين" من صفحة App Service، عيّن اسماً للسلسلة، والصق سلسلة اتصال JDBC في حقل القيمة، ثم عيّن النوع على "مخصص". يمكنك اختيارياً تعيين سلسلة الاتصال هذه كإعداد فتحة.
يمكن لتطبيقنا الوصول إلى سلسلة الاتصال هذه باعتبارها متغير بيئة بالاسم
CUSTOMCONNSTR_<your-string-name>
. على سبيل المثال،CUSTOMCONNSTR_exampledb
في ملف application.properties لديك، قم بالإشارة إلى سلسلة الاتصال هذه باستخدام اسم متغير البيئة. على سبيل المثال، سنستخدم التعليمات البرمجية التالية:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
لمزيد من المعلومات، راجع وثائق Spring Boot حول الوصول إلى البيانات والتكوينات الخارجية.
تلميح
بشكل افتراضي، يمكن لحاويات Linux Tomcat تكوين مصادر البيانات المشتركة تلقائيا لك في خادم Tomcat. الشيء الوحيد الذي عليك القيام به هو إضافة إعداد تطبيق يحتوي على سلسلة الاتصال JDBC صالح إلى قاعدة بيانات Oracle أو SQL Server أو PostgreSQL أو MySQL (بما في ذلك بيانات اعتماد الاتصال)، وتضيف App Service تلقائيا قاعدة البيانات المشتركة المقابلة إلى /usr/local/tomcat/conf/context.xml، باستخدام برنامج تشغيل مناسب متوفر في الحاوية. للحصول على سيناريو شامل باستخدام هذا الأسلوب، راجع البرنامج التعليمي: إنشاء تطبيق ويب Tomcat باستخدام Azure App Service على Linux وMySQL.
تنطبق هذه الإرشادات على جميع اتصالات قاعدة البيانات. تحتاج إلى تعبئة العناصر النائبة باسم فئة برنامج تشغيل قاعدة البيانات المختارة وملف JAR. يتوفر جدول بأسماء الفئات و تنزيلات برامج التشغيل لقواعد البيانات الشائعة.
قاعدة البيانات | اسم فئة برنامج التشغيل | برنامج تشغيل JDBC |
---|---|---|
PostgreSQL | org.postgresql.Driver |
تنزيل |
MySQL | com.mysql.jdbc.Driver |
تنزيل (حدد "مستقل عن النظام الأساسي") |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
تنزيل |
لتكوين Tomcat لاستخدام Java Database Connectivity (JDBC) أو Java Persistence API (JPA)، قم أولاً بتخصيص متغير البيئة CATALINA_OPTS
الذي تتم قراءته بواسطة Tomcat عند بدء التشغيل. يمكنك تعيين هذه القيم من خلال إعداد تطبيق في وظيفة Maven الإضافية لـ App Service:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
أو يمكنك تعيين متغيرات البيئة في صفحةالتكوين>إعدادات التطبيق في مدخل Azure.
بعد ذلك، حدد ما إذا كان يجب توفير مصدر البيانات لتطبيق واحد أو لجميع التطبيقات التي يتم تشغيلها على Tomcat servlet.
مصادر البيانات على مستوى التطبيق
أنشئ ملف context.xml في دليل META-INF/ لمشروعك. إنشاء الدليل META-INF/ إذا لم يكن موجودا.
في context.xml، أضف عنصر
Context
لربط مصدر البيانات بعنوان JNDI. استبدل العنصر النائبdriverClassName
باسم فئة برنامج التشغيل من الجدول بالأعلى.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
حدّث web.xml لتطبيقك حتى تتمكن من استخدام مصدر البيانات في تطبيقك.
<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>
الموارد المشتركة على مستوى الخادم
تتطلب إضافة مصدر بيانات مشترك على مستوى الخادم تحرير server.xml Tomcat. الطريقة الأكثر موثوقية للقيام بذلك هي كما يلي:
- تحميل برنامج نصي لبدء التشغيل وتعيين المسار إلى البرنامج النصي في أمر بدء تشغيل التكوين>. يمكنك تحميل البرنامج النصي لبدء التشغيل باستخدام FTP.
يقوم البرنامج النصي لبدء التشغيل بتحويل xsl إلى ملف server.xml وإخراج ملف xml الناتج إلى /usr/local/tomcat/conf/server.xml
. يجب أن يقوم البرنامج النصي لبدء التشغيل بتثبيت libxslt عبر apk. يمكن تحميل ملف xsl والبرنامج النصي لبدء التشغيل عبر FTP. فيما يلي مثال للبرنامج النصي لبدء التشغيل.
# 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
يضيف ملف XSL المثال التالي عقدة موصل جديدة إلى 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(., '<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 Connector 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>
إنهاء التكوين
وأخيراً، ضع ملفات JAR لبرنامج التشغيل في Tomcat classpath وأعد تشغيل App Service لديك.
- تأكد من أن ملفات برنامج تشغيل JDBC متوفرة لمحمل فئة Tomcat عن طريق وضعها في الدليل /home/site/lib . في Cloud Shell، قم بتشغيل
az webapp deploy --type=lib
لكل برنامج تشغيل JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
إذا كنت قد أنشئت مصدر بيانات على مستوى الخادم، فأعد تشغيل تطبيق App Service Linux. يقوم Tomcat بإعادة CATALINA_BASE
/home/tomcat
تعيين التكوين المحدث واستخدامه.
تلميح
بشكل افتراضي، يمكن لحاويات Linux JBoss تكوين مصادر البيانات المشتركة تلقائيا لك في خادم JBoss. الشيء الوحيد الذي عليك القيام به هو إضافة إعداد تطبيق يحتوي على سلسلة الاتصال JDBC صالح إلى قاعدة بيانات Oracle أو SQL Server أو PostgreSQL أو MySQL (بما في ذلك بيانات اعتماد الاتصال)، وتضيف App Service تلقائيا مصدر البيانات المشتركة المقابل، باستخدام برنامج تشغيل مناسب متوفر في الحاوية. للحصول على سيناريو شامل باستخدام هذا الأسلوب، راجع البرنامج التعليمي: إنشاء تطبيق ويب JBoss باستخدام Azure App Service على Linux وMySQL.
هناك ثلاث خطوات أساسية عند تسجيل مصدر بيانات باستخدام JBoss EAP:
- تحميل برنامج تشغيل JDBC.
- أضف برنامج تشغيل JDBC كوحدة نمطية.
- إضافة مصدر بيانات باستخدام الوحدة النمطية.
خدمة التطبيقات هي خدمة استضافة عديمة الحالة، لذلك يجب وضع هذه الخطوات في برنامج نصي لبدء التشغيل وتشغيله في كل مرة تبدأ فيها حاوية JBoss. استخدام PostgreSQL وMySQL وقاعدة بيانات SQL كأمثلة:
ضع أوامر JBoss CLI في ملف يسمى jboss-cli-commands.cli. يجب أن تضيف أوامر JBoss الوحدة النمطية وتسجلها باعتبارها مصدراً للبيانات. يوضح المثال التالي أوامر JBoss CLI لإنشاء مصدر بيانات PostgreSQL باسم
java:jboss/datasources/postgresDS
JNDI .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
لاحظ أن
module add
الأمر يستخدم ثلاثة متغيرات بيئة (DB_HOST
وDB_USERNAME
وDB_PASSWORD
)، والتي يجب عليك إضافتها في App Service كإعدادات تطبيق. يضيفها البرنامج النصي بدون العلامة--resolve-parameter-values
بحيث لا يحفظ JBoss قيمها في نص عادي.إنشاء برنامج نصي لبدء التشغيل، startup.sh، يستدعي أوامر JBoss CLI. يوضح المثال التالي كيفية استدعاء .
jboss-cli-commands.cli
لاحقا، ستقوم بتكوين App Service لتشغيل هذا البرنامج النصي عند بدء تشغيل الحاوية.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cli
باستخدام خيار نشر من اختيارك، قم بتحميل برنامج تشغيل JDBC الخاص بك، jboss-cli-commands.cli، startup.sh إلى المسارات المحددة في البرامج النصية المعنية. بشكل خاص، قم بتحميل startup.sh كملف بدء تشغيل. على سبيل المثال:
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
لمزيد من المعلومات، راجع نشر الملفات إلى App Service.
للتأكد من إضافة مصدر البيانات إلى خادم JBoss، SSH في تطبيق الويب الخاص بك وتشغيل $JBOSS_HOME/bin/jboss-cli.sh --connect
. بمجرد الاتصال ب JBoss، قم بتشغيل /subsystem=datasources:read-resource
لطباعة قائمة بمصادر البيانات.
كما هو محدد من قبل jboss-cli-commands.cli سابقا، يمكنك الوصول إلى اتصال PostgreSQL باستخدام اسم java:jboss/datasources/postgresDS
JNDI .
الخطوات التالية
تفضل بزيارة مركز Azure لمطوري برامج Java للعثور على التشغيل السريع لـ Azure والبرامج التعليمية ووثائق Java المرجعية.