Teilen über


Konfigurieren von Datenquellen für eine Tomcat-, JBoss- oder Java SE-App in Azure App Service

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 auf einem vollständig verwalteten Dienst in drei Varianten aus:

  • Java Standard Edition (SE): Kann eine als Java Archive (JAR)-Paket bereitgestellte App ausführen, die einen eingebetteten Server enthält (z. B. Spring Boot, Quarkus, 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. Unterstützt für Linux-Apps in einer Reihe von Preisniveaus, einschließlich Free, Premium v3 und Isolated v2.gti

Hinweis

JBoss EAP on App Service unterstützt jetzt die Abrechnung "Bring Your Own License" (BYOL), sodass Kunden mit vorhandenen Red Hat-Abonnements diese Lizenzen direkt auf ihre JBoss EAP-Bereitstellungen in Azure App Service anwenden können. Erfahren Sie mehr.

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.

  1. Legen Sie auf der App Service-Seite im Abschnitt „Konfiguration“ einen Namen für die Zeichenfolge fest, fügen Sie Ihre JDBC-Verbindungszeichenfolge in das Feld für den Wert ein, und legen Sie den Typ auf „Benutzerdefiniert“ fest. Sie können diese Verbindungszeichenfolge optional als Sloteinstellung festlegen.

    Diese Verbindungszeichenfolge ist für die Anwendung als die Umgebungsvariable CUSTOMCONNSTR_<your-string-name> verfügbar. Beispiel: CUSTOMCONNSTR_exampledb.

  2. Verweisen Sie in Ihrer Datei application.properties über den Namen der Umgebungsvariable auf diese Verbindungszeichenfolge. In unserem Beispiel würden wir folgenden Code verwenden:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Weitere Informationen finden Sie in der Spring Boot-Dokumentation zum Datenzugriff und unter externalisierte Konfigurationen.

Tipp

Linux Tomcat-Container können freigegebene Datenquellen automatisch für Sie auf dem Tomcat-Server konfigurieren, indem sie die Umgebungsvariable WEBSITE_AUTOCONFIGURE_DATABASE auf truefestlegen. Sie müssen lediglich eine App-Einstellung hinzufügen, die eine gültige JDBC-Verbindungszeichenfolge zu einer Oracle-, SQL Server-, PostgreSQL- oder MySQL-Datenbank (einschließlich der Verbindungsanmeldeinformationen) enthält. App Service fügt automatisch die entsprechende freigegebene Datenbank /usr/local/tomcat/conf/context.xml hinzu, wobei ein geeigneter Treiber verwendet wird, der im Container verfügbar ist. Ein End-to-End-Szenario mit diesem Ansatz finden Sie unter Tutorial: Erstellen einer Tomcat-Web-App mit Azure App Service für Linux und MySQL.

Diese Anweisungen gelten für alle Datenbankverbindungen. Für die Platzhalter müssen der Treiberklassenname und die JAR-Datei der ausgewählten Datenbank angegeben werden. In der folgenden Tabelle finden Sie Klassennamen und Treiberdownloads für gängige Datenbanken:

Datenbank Treiberklassenname JDBC-Treiber
PostgreSQL org.postgresql.Driver Herunterladen
MySQL com.mysql.jdbc.Driver Download (Wählen Sie „Platform Independent“ (Plattformunabhängig) aus.)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Herunterladen

Wenn Sie Tomcat für die Verwendung von Java Database Connectivity (JDBC) oder der Java-Persistenz-API (JPA) konfigurieren möchten, passen Sie zuerst die Umgebungsvariable CATALINA_OPTS an, die von Tomcat beim Start eingelesen wird. Diese Werte können mithilfe einer App-Einstellung im App Service-Maven-Plug-In festgelegt werden:

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

Alternativ können Sie die Umgebungsvariablen im Azure-Portal auf der Seite Konfiguration>Anwendungseinstellungen festlegen.

Legen Sie als Nächstes fest, ob die Datenquelle nur für eine einzelne Anwendung oder für alle im Tomcat-Servlet ausgeführten Anwendungen verfügbar sein soll.

Datenquellen auf Anwendungsebene

So konfigurieren Sie eine Datenquelle auf Anwendungsebene:

  1. Erstellen Sie eine context.xml-Datei im Verzeichnis META-INF/ Ihres Projekts. Erstellen Sie das Verzeichnis META-INF/, falls es noch nicht vorhanden ist.

  2. Fügen Sie in context.xml ein Element vom Typ Context hinzu, um die Datenquelle mit einer JNDI-Adresse zu verknüpfen. Ersetzen Sie den Platzhalter driverClassName durch den Klassennamen Ihres Treibers aus der obigen Tabelle.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. 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 sie die folgende Konvention für Dateien verwenden, die in /home/site/wwwroot kopiert werden: Wenn server.xml.xsl oder server.xml.xslt vorhanden sind, werden sie auf Tomcats server.xml angewendet. Wenn context.xml.xsl oder context.xml.xslt vorhanden sind, werden sie auf Tomcats context.xmlangewendet.

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:

  1. Laden Sie ein Startskript hoch, und legen Sie unter Konfiguration>Startbefehl den Pfad des Skripts fest. Das Startskript kann per FTP hochgeladen werden.

Ihr Startskript erstellt eine XSL-Transformation auf die server.xml Datei und gibt die resultierende XML-Datei nach /usr/local/tomcat/conf/server.xml aus. Das Startskript sollte libxslt oder xlstproc abhängig von der Distribution der Tomcat-Version Ihrer Web-App installieren. Ihre XSL-Datei und das Startskript können über FTP hochgeladen werden. Im Anschluss finden Sie ein Beispiel für ein Startskript:

# 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(., '&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'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>

Abschließen der Konfiguration

Platzieren Sie abschließend die JAR-Dateien des Treibers im Tomcat-Klassenpfad, und starten Sie Ihre App Service-Instanz neu.

  1. 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=lib aus:
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 die Linux JBoss-Container freigegebene Datenquellen automatisch für Sie 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 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 mit diesem Ansatz finden Sie unter Tutorial: Erstellen einer JBoss-Web-App mit Azure App Service für Linux und MySQL.

Es gibt drei wichtige Schritte beim Registrieren einer Datenquelle bei JBoss EAP:

  1. Hochladen des JDBC-Treibers
  2. Hinzufügen des JDBC-Treibers als Modul
  3. 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. Verwenden von PostgreSQL, MySQL und SQL-Datenbank als Beispiele:

Hinweis

JBoss EAP on App Service unterstützt jetzt die Abrechnung "Bring Your Own License" (BYOL), sodass Kunden mit vorhandenen Red Hat-Abonnements diese Lizenzen direkt auf ihre JBoss EAP-Bereitstellungen in Azure App Service anwenden können. Erfahren Sie mehr.

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

    Beachten Sie, dass der Befehl module add drei Umgebungsvariablen verwendet (DB_HOST, DB_USERNAMEund DB_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.

  2. Erstellen Sie ein Startskript namens startup.sh, das die JBoss-CLI-Befehle aufruft. Das folgende Beispiel zeigt, wie Sie Ihr jboss-cli-commands.cli aufrufen. Später konfigurieren Sie App Service dazu, dieses Skript beim Starten des Containers auszuführen.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cli
    
  3. Laden 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 insbesondere 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 startup
    

    Weitere Informationen finden Sie unter Dateien im App Service bereitstellen.

Um sich zu vergewissern, dass die Datenquelle dem JBoss-Server hinzugefügt wurde, stellen Sie eine SSH-Verbindung mit Ihrer Web-App her, und führen Sie $JBOSS_HOME/bin/jboss-cli.sh --connect aus. Sobald Sie mit JBoss verbunden sind, führen Sie /subsystem=datasources:read-resource aus, um eine Liste der Datenquellen auszugeben.

Wie von jboss-cli-commands.cli zuvor definiert, können Sie über den JNDI-Namen java:jboss/datasources/postgresDS auf die PostgreSQL-Verbindung zugreifen.

Besuchen Sie das Center Azure für Java-Entwickler, um Azure-Schnellstarts, Tutorials und Java-Referenzdokumentation zu finden.