Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Datenquellen in einer Java SE-, Tomcat- oder JBoss-App in App Service konfiguriert werden.
Azure App Service führt Java-Webanwendungen in drei Typen in einem vollständig verwalteten Dienst aus:
- Java Standard Edition (SE). Java SE kann eine App ausführen, die als Java-Archivpaket (JAR) bereitgestellt wird, das einen eingebetteten Server enthält, z. B. Spring Boot, Aspxus, Dropwizard oder eine App mit einem eingebetteten Tomcat- oder Jetty-Server.
- Tomcat. Der integrierte Tomcat-Server kann eine App ausführen, die als War-Paket (Web Application Archive) bereitgestellt wird.
- JBoss Enterprise Application Platform (EAP): Der integrierte JBoss EAP-Server kann eine App ausführen, die als WAR- oder Enterprise-Archivpaket (EAR) bereitgestellt wird. Diese Option wird für Linux-Apps in einer Reihe von Preisstufen unterstützt, die free, Premium v3 und Isolated v2 enthalten.
Hinweis
JBoss EAP on App Service unterstützt jetzt die Bring Your Own License (BYOL)-Abrechnung. BYOL ermöglicht Kunden, die über vorhandene Red Hat-Abonnements verfügen, diese Lizenzen direkt auf ihre JBoss EAP-Bereitstellungen in Azure App Service anzuwenden. Weitere Informationen finden Sie unter BYOL-Support für JBoss EAP für App Service.
Konfigurieren der Datenquelle
Für das Verbinden mit Datenquellen in Spring Boot-Anwendungen wird empfohlen, Verbindungszeichenfolgen zu erstellen und in Ihre Datei application.properties einzufügen.
Wählen Sie im linken Bereich der Seite "App Service" Einstellungen>Umgebungsvariablen aus. Wählen Sie auf der Registerkarte "Verbindungszeichenfolgen" die Option "Hinzufügen" aus. Legen Sie einen Namen für die Zeichenfolge fest, fügen Sie Ihre JDBC-Verbindungszeichenfolge in das Feld Wert ein, und legen Sie den Typ auf Benutzerdefiniert fest. Optional können Sie die Verbindungszeichenfolge als Steckplatzeinstellung festlegen.
Die Verbindungszeichenfolge steht Ihrer Anwendung als Umgebungsvariable mit dem Namen
CUSTOMCONNSTR_<your-string-name>zur Verfügung. Beispiel:CUSTOMCONNSTR_exampledb.Verweisen Sie in der Datei "application.properties " auf die Verbindungszeichenfolge mit dem Namen der Umgebungsvariablen. Im vorherigen Beispiel würden Sie diesen Code verwenden:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Weitere Informationen finden Sie in der Spring Boot-Dokumentation zu Datenzugriff und externer Konfiguration.
Tipp
Linux Tomcat-Container können freigegebene Datenquellen automatisch auf dem Tomcat-Server konfigurieren, wenn Sie die Umgebungsvariable WEBSITE_AUTOCONFIGURE_DATABASE auf truefestlegen. Das Einzige, was Sie tun müssen, ist eine App-Einstellung hinzuzufügen, die eine gültige JDBC-Verbindungszeichenfolge zu einer Oracle-, SQL Server-, PostgreSQL- oder MySQL-Datenbank enthält (einschließlich der Verbindungsanmeldeinformationen). Der App-Dienst fügt automatisch die entsprechende freigegebene Datenbank zu /usr/local/tomcat/conf/context.xmlhinzu, wobei ein entsprechender Treiber verwendet wird, der im Container verfügbar ist. Ein End-to-End-Szenario, das diesen Ansatz verwendet, finden Sie im Lernprogramm: Erstellen einer Tomcat-Web-App mit Azure App Service unter Linux und MySQL.
Diese Anweisungen gelten für alle Datenbankverbindungen. Sie müssen Platzhalter durch den Treiberklassennamen und die JAR-Datei der ausgewählten Datenbank ersetzen. Die folgende Tabelle enthält Klassennamen und Treiberdownloads für allgemeine Datenbanken.
| Datenbank | Treiberklassenname | JDBC-Treiber |
|---|---|---|
| PostgreSQL | org.postgresql.Driver |
Herunterladen |
| MySQL | com.mysql.jdbc.Driver |
Herunterladen ( Plattformunabhängig auswählen.) |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Herunterladen |
Zum Konfigurieren von Tomcat für die Verwendung von Java Database Connectivity (JDBC) oder der Java Persistence API (JPA) passen Sie zuerst die Umgebungsvariable an, die von Tomcat zum Starten gelesen wird CATALINA_OPTS. Legen Sie diesen Wert mithilfe einer App-Einstellung im App Service Maven-Plug-In fest:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Oder legen Sie die Umgebungsvariable auf der Registerkarte "App-Einstellungen" der Seite "Umgebungsvariablen> im Azure-Portal fest.
Ermitteln Sie als Nächstes, ob die Datenquelle für eine Anwendung oder für alle Anwendungen verfügbar sein soll, die auf dem Tomcat-Servlet ausgeführt werden.
Datenquellen auf Anwendungsebene
So konfigurieren Sie eine Datenquelle auf Anwendungsebene:
Erstellen Sie eine context.xml-Datei im Verzeichnis META-INF/ Ihres Projekts. Erstellen Sie das Verzeichnis META-INF/, falls es noch nicht vorhanden ist.
Fügen Sie in context.xml ein Element vom Typ
Contexthinzu, um die Datenquelle mit einer JNDI-Adresse zu verknüpfen. Ersetzen Sie dendriverClassName-Platzhalter durch den Klassennamen Ihres Treibers aus der Tabelle, die weiter oben in diesem Artikel angezeigt wird.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>Aktualisieren Sie die Datei web.xml Ihrer Anwendung, sodass die Datenquelle in Ihrer Anwendung verwendet wird.
<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>
Gemeinsam verwendete Ressourcen auf Serverebene
Tipp
Linux Tomcat-Container können XSLT-Dateien automatisch anwenden, indem die folgende Konvention für Dateien verwendet wird, die in /home/site/wwwroot kopiert werden: Wenn server.xml.xsl oder server.xml.xslt vorhanden ist, werden die Dateien auf Tomcats server.xml angewendet. Wenn context.xml.xsl oder context.xml.xslt vorhanden ist, werden die Dateien auf Tomcats context.xml angewendet.
Zum Hinzufügen einer freigegebenen Datenquelle auf Serverebene müssen Sie die Tomcat-Konfiguration server.xml bearbeiten. Da Dateiänderungen außerhalb des /home Verzeichnisses kurzlebig sind, müssen Änderungen an den Konfigurationsdateien von Tomcat programmgesteuert angewendet werden:
- Laden Sie ein Startskript hoch, und legen Sie den Pfad zum Skript in der Einstellungskonfiguration> fest. Fügen Sie auf der Registerkarte "Stapeleinstellungen " den Pfad im Befehlsfeld "Start" hinzu . Sie können das Startskript mithilfe von FTP hochladen.
Ihr Startskript erstellt eine XSL-Transformation in die server.xml Datei und gibt die resultierende XML-Datei in /usr/local/tomcat/conf/server.xml. Das Startskript sollte libxslt oder xlstproc installieren, abhängig von der Distribution der Version von Tomcat Ihrer Webanwendung, wie im Kommentar des folgenden Beispielskripts angegeben. Sie können FTP verwenden, um Ihre XSL-Datei und das Startskript hochzuladen.
# 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
Die folgende XSL-Beispieldatei fügt der Datei „server.xml“ von Tomcat einen neuen Connectorknoten hinzu.
<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 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>
</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>
Abschließen der Konfiguration
Platzieren Sie schließlich die Treiber-JARs im Tomcat-Klassenpfad, und starten Sie Ihre App Service-App neu.
- Stellen Sie sicher, dass die JDBC-Treiberdateien für das Tomcat-Klassenladeprogramm verfügbar sind, indem Sie sie im Verzeichnis /home/site/lib ablegen. Führen Sie in Cloud Shell für jede Treiber-JAR-Datei
az webapp deploy --type=libaus:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Wenn Sie eine Datenquelle auf Serverebene erstellt haben, starten Sie die App Service-Linux-Anwendung neu. Tomcat setzt CATALINA_BASE auf /home/tomcat zurück und verwendet die aktualisierte Konfiguration.
Tipp
Standardmäßig können Linux-JBoss-Container freigegebene Datenquellen automatisch auf dem JBoss-Server konfigurieren. Das einzige, was Sie tun müssen, ist das Hinzufügen einer App-Einstellung, die eine gültige SHAPE-Verbindungszeichenfolge zu einer Oracle-, SQL Server-, PostgreSQL- oder MySQL-Datenbank (einschließlich der Verbindungsanmeldeinformationen) enthält, und die App-Einstellungs-/Umgebungsvariable WEBSITE_AUTOCONFIGURE_DATABASE mit dem Wert truehinzufügen. JDBC-Verbindungen, die mit dem Service-Connector erstellt wurden, werden ebenfalls unterstützt. Der App-Dienst fügt automatisch die entsprechende freigegebene Datenquelle (basierend auf dem Namen der App-Einstellung und dem Suffix _DS) mithilfe eines geeigneten Treibers hinzu, der im Container verfügbar ist. Ein End-to-End-Szenario, das diesen Ansatz verwendet, finden Sie im Lernprogramm: Erstellen einer JBoss-Web-App mit Azure App Service unter Linux und MySQL.
Es gibt drei Hauptschritte zum Registrieren einer Datenquelle bei JBoss EAP:
- Hochladen des JDBC-Treibers
- Hinzufügen des JDBC-Treibers als Modul
- Hinzufügen einer Datenquelle mit dem Modul
App Service ist ein zustandsloser Hostingdienst, daher müssen Sie diese Schritte in ein Startskript einfügen und jedes Mal ausführen, wenn der JBoss-Container gestartet wird. Hier sind Beispiele für PostgreSQL, MySQL und Azure SQL-Datenbank:
Hinweis
JBoss EAP on App Service unterstützt die Bring Your Own License (BYOL)-Abrechnung. BYOL ermöglicht Kunden, die über vorhandene Red Hat-Abonnements verfügen, diese Lizenzen direkt auf ihre JBoss EAP-Bereitstellungen in Azure App Service anzuwenden. Weitere Informationen finden Sie unter BYOL-Support für JBoss EAP.
Fügen Sie Ihre JBoss-CLI-Befehle in eine Datei mit dem Namen jboss-cli-commands.cli ein. Die JBoss-Befehle müssen das Modul hinzufügen und es als Datenquelle registrieren. Das folgende Beispiel zeigt die JBoss-CLI-Befehle zum Erstellen einer PostgreSQL-Datenquelle mit dem JNDI-Namen
java:jboss/datasources/postgresDS.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=trueBeachten Sie, dass der Befehl
module adddrei Umgebungsvariablen verwendet (DB_HOST,DB_USERNAMEundDB_PASSWORD), die Sie in App Service als App-Einstellungen hinzufügen müssen. Das Skript fügt sie ohne das--resolve-parameter-values-Flag hinzu, sodass JBoss ihre Werte nicht als Klartext speichert.Erstellen Sie ein Startskript namens startup.sh, das die JBoss-CLI-Befehle aufruft. Das folgende Beispiel zeigt, wie Sie Die jboss-cli-commands.cli-Datei aufrufen. Später konfigurieren Sie App Service so, dass dieses Skript ausgeführt wird, wenn der Container gestartet wird.
$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss-cli-commands.cliLaden Sie mit einer Bereitstellungsoption Ihrer Wahl den JDBC-Treiber (jboss-cli-commands.cli) und startup.shstartup.sh in die in den jeweiligen Skripts angegebenen Pfade hoch. Laden Sie startup.sh als Startdatei hoch. Zum Beispiel:
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 startupWeitere Informationen finden Sie unter Dateien im App Service bereitstellen.
Um zu bestätigen, dass die Datenquelle dem JBoss-Server hinzugefügt wurde, SSHen Sie in Ihre Web-App und geben Sie den Befehl $JBOSS_HOME/bin/jboss-cli.sh --connect ein. Nachdem Sie mit JBoss verbunden sind, führen Sie die Ausführung /subsystem=datasources:read-resource aus, um eine Liste der Datenquellen zu drucken.
Gemäß der Definition in jboss-cli-commands.cli können Sie mithilfe des JNDI-Namens java:jboss/datasources/postgresDSauf die PostgreSQL-Verbindung zugreifen.