Share via


Gegevensbronnen configureren voor een Tomcat-, JBoss- of Java SE-app in Azure-app Service

In dit artikel wordt beschreven hoe u gegevensbronnen configureert in een Java SE-, Tomcat- of JBoss-app in App Service.

Azure-app Service voert Java-webtoepassingen uit op een volledig beheerde service in drie varianten:

  • Java SE: kan een app uitvoeren die is geïmplementeerd als een JAR-pakket dat een ingesloten server bevat (zoals Spring Boot, Dropwizard, Quarkus of een met een ingesloten Tomcat- of Jetty-server).
  • Tomcat: de ingebouwde Tomcat-server kan een app uitvoeren die is geïmplementeerd als een WAR-pakket.
  • JBoss EAP : alleen ondersteund voor Linux-apps in de prijscategorieën Premium v3 en Isolated v2. De ingebouwde JBoss EAP-server kan een app uitvoeren die is geïmplementeerd als WAR- of EAR-pakket.

Notitie

Voor Spring-toepassingen wordt u aangeraden Azure Spring Apps te gebruiken. U kunt echter nog steeds Azure-app Service als bestemming gebruiken. Zie de richtlijnen voor java-workloadbestemmingen voor advies.

De gegevensbron configureren

Als u verbinding wilt maken met gegevensbronnen in Spring Boot-toepassingen, raden we u aan om verbindingsreeks s te maken en deze in uw bestand application.properties te injecteren.

  1. Stel in de sectie Configuratie van de App Service-pagina een naam in voor de tekenreeks, plak uw JDBC-verbindingsreeks in het waardeveld en stel het type in op 'Aangepast'. U kunt deze verbindingsreeks desgewenst instellen als site-instelling.

    Deze verbindingsreeks is toegankelijk voor onze toepassing als een omgevingsvariabele met de naam CUSTOMCONNSTR_<your-string-name>. Bijvoorbeeld: CUSTOMCONNSTR_exampledb.

  2. Raadpleeg in het bestand application.properties deze verbindingsreeks met de naam van de omgevingsvariabele. In ons voorbeeld gebruiken we de volgende code:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Zie de Spring Boot-documentatie over gegevenstoegang en externe configuraties voor meer informatie.

Tip

Standaard kunnen de Linux Tomcat-containers automatisch gedeelde gegevensbronnen voor u configureren op de Tomcat-server. U hoeft alleen maar een app-instelling toe te voegen die een geldige JDBC-verbindingsreeks bevat aan een Oracle-, SQL Server-, PostgreSQL- of MySQL-database (inclusief de verbindingsreferenties) en App Service voegt automatisch de gedeelde database toe aan /usr/local/tomcat/conf/context.xml, met behulp van een geschikt stuurprogramma dat beschikbaar is in de container. Zie Zelfstudie: Een Tomcat-web-app bouwen met Azure-app Service op Linux en MySQL voor een end-to-end scenario met behulp van deze benadering.

Deze instructies zijn van toepassing op alle databaseverbindingen. U moet tijdelijke aanduidingen invullen met de stuurprogrammaklassenaam en het JAR-bestand van de gekozen database. Opgegeven is een tabel met klassenamen en stuurprogrammadownloads voor algemene databases.

Database Naam van stuurprogrammaklasse JDBC-stuurprogramma
PostgreSQL org.postgresql.Driver Downloaden
MySQL com.mysql.jdbc.Driver Downloaden (Platformonafhankelijk selecteren)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Downloaden

Als u Tomcat wilt configureren voor het gebruik van Java Database Connectivity (JDBC) of de Java Persistence-API (JPA), past u eerst de CATALINA_OPTS omgevingsvariabele aan die wordt gelezen door Tomcat bij het opstarten. Stel deze waarden in via een app-instelling in de App Service Maven-invoegtoepassing:

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

Of stel de omgevingsvariabelen in op de pagina Configuratietoepassingsinstellingen> in Azure Portal.

Bepaal vervolgens of de gegevensbron beschikbaar moet zijn voor één toepassing of voor alle toepassingen die worden uitgevoerd op de Tomcat-servlet.

Gegevensbronnen op toepassingsniveau

  1. Maak een context.xml-bestand in de META-INF/ -map van uw project. Maak de META-INF/ -map als deze niet bestaat.

  2. Voeg in context.xml een Context element toe om de gegevensbron te koppelen aan een JNDI-adres. Vervang de tijdelijke aanduiding door de driverClassName klassenaam van het stuurprogramma uit de bovenstaande tabel.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Werk de web.xml van uw toepassing bij om de gegevensbron in uw toepassing te gebruiken.

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

Gedeelde resources op serverniveau

Als u een gedeelde gegevensbron op serverniveau toevoegt, moet u de server.xml van Tomcat bewerken. De meest betrouwbare manier om dit te doen is als volgt:

  1. Upload een opstartscript en stel het pad in naar het script in de configuratie-opstartopdracht>. U kunt het opstartscript uploaden met FTP.

Uw opstartscript maakt een xsl-transformatie naar het server.xml-bestand en voert het resulterende XML-bestand uit naar /usr/local/tomcat/conf/server.xml. Het opstartscript moet libxslt installeren via apk. Het xsl-bestand en het opstartscript kunnen worden geüpload via FTP. Hieronder ziet u een voorbeeld van een opstartscript.

# 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

In het volgende voorbeeld voegt het XSL-bestand een nieuw connectorknooppunt toe aan de Tomcat-server.xml.

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

Configuratie voltooien

Plaats ten slotte het stuurprogramma-JAR's in het Tomcat-klassepad en start uw App Service opnieuw op.

  1. Zorg ervoor dat de JDBC-stuurprogrammabestanden beschikbaar zijn voor de Tomcat-klasseloader door ze in de map /home/site/lib te plaatsen. Voer in Cloud Shell uit az webapp deploy --type=lib voor elk JAR-stuurprogramma:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Als u een gegevensbron op serverniveau hebt gemaakt, start u de App Service Linux-toepassing opnieuw. Tomcat wordt opnieuw ingesteld CATALINA_BASE /home/tomcat op en gebruikt de bijgewerkte configuratie.

Er zijn drie belangrijke stappen bij het registreren van een gegevensbron bij JBoss EAP: het JDBC-stuurprogramma uploaden, het JDBC-stuurprogramma toevoegen als een module en de module registreren. App Service is een staatloze hostingservice, dus de configuratieopdrachten voor het toevoegen en registreren van de gegevensbronmodule moeten worden gescript en toegepast wanneer de container wordt gestart.

  1. Haal het JDBC-stuurprogramma van uw database op.

  2. Maak een XML-moduledefinitiebestand voor het JDBC-stuurprogramma. In het volgende voorbeeld ziet u een moduledefinitie voor PostgreSQL.

    <?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>
    
  3. Plaats uw JBoss CLI-opdrachten in een bestand met de naam jboss-cli-commands.cli. De JBoss-opdrachten moeten de module toevoegen en registreren als gegevensbron. In het volgende voorbeeld ziet u de JBoss CLI-opdrachten voor PostgreSQL.

    #!/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
    
  4. Maak een opstartscript dat startup_script.sh de JBoss CLI-opdrachten aanroept. In het volgende voorbeeld ziet u hoe u uw jboss-cli-commands.cliaanroept. Later configureert u App Service om dit script uit te voeren wanneer de container wordt gestart.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Upload uw JDBC-stuurprogrammajboss-cli-commands.clistartup_script.sh, en de moduledefinitie met /site/deployments/tools/behulp van een FTP-client naar keuze.

  6. Configureer uw site om uit te voeren startup_script.sh wanneer de container wordt gestart. Navigeer in Azure Portal naar de opstartopdracht Algemene instellingen>voor configuratie>. Stel het opstartopdrachtveld in op /home/site/deployments/tools/startup_script.sh. Sla uw wijzigingen op.

Om te bevestigen dat de gegevensbron is toegevoegd aan de JBoss-server, SSH in uw web-app en voert u deze uit $JBOSS_HOME/bin/jboss-cli.sh --connect. Nadat u verbinding hebt gemaakt met JBoss, voert u de /subsystem=datasources:read-resource opdracht uit om een lijst met de gegevensbronnen af te drukken.

Volgende stappen

Ga naar het Azure voor Java-ontwikkelaarscentrum om azure-snelstartgidsen, zelfstudies en Java-referentiedocumentatie te vinden.