Dela via


Konfigurera datakällor för en Tomcat-, JBoss- eller Java SE-app i Azure App Service

Den här artikeln visar hur du konfigurerar datakällor i en Java SE-, Tomcat- eller JBoss-app i App Service.

Azure App Service kör Java-webbprogram på en fullständigt hanterad tjänst i tre varianter:

  • Java SE – Kan köra en app som distribueras som ett JAR-paket som innehåller en inbäddad server (till exempel Spring Boot, Dropwizard, Quarkus eller en med en inbäddad Tomcat- eller Jetty-server).
  • Tomcat – Den inbyggda Tomcat-servern kan köra en app som distribueras som ett WAR-paket.
  • JBoss EAP – Stöds endast för Linux-appar på prisnivåerna Premium v3 och Isolerad v2. Den inbyggda JBoss EAP-servern kan köra en app som distribueras som ett WAR- eller EAR-paket.

Kommentar

För Spring-program rekommenderar vi att du använder Azure Spring Apps. Du kan dock fortfarande använda Azure App Service som mål. Mer information finns i Vägledning för Java-arbetsbelastningsmål.

Konfigurera datakällan

För att ansluta till datakällor i Spring Boot-program rekommenderar vi att du skapar anslutningssträng och matar in dem i filen application.properties.

  1. I avsnittet "Konfiguration" på App Service-sidan anger du ett namn för strängen, klistrar in JDBC-anslutningssträng i värdefältet och anger typen "Anpassad". Du kan också ange den här anslutningssträng som platsinställning.

    Den här anslutningssträng är tillgänglig för vårt program som en miljövariabel med namnet CUSTOMCONNSTR_<your-string-name>. Exempel: CUSTOMCONNSTR_exampledb

  2. I filen application.properties refererar du till den här anslutningssträng med miljövariabelns namn. I vårt exempel använder vi följande kod:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Mer information finns i Spring Boot-dokumentationen om dataåtkomst och externaliserade konfigurationer.

Dricks

Som standard kan Linux Tomcat-containrar automatiskt konfigurera delade datakällor åt dig på Tomcat-servern. Det enda du kan göra är att lägga till en appinställning som innehåller en giltig JDBC-anslutningssträng till en Oracle-, SQL Server-, PostgreSQL- eller MySQL-databas (inklusive anslutningsautentiseringsuppgifterna) och App Service lägger automatiskt till den coo-svarande delade databasen till /usr/local/tomcat/conf/context.xml åt dig med hjälp av en lämplig drivrutin som är tillgänglig i containern. Ett scenario från slutpunkt till slutpunkt med den här metoden finns i Självstudie: Skapa en Tomcat-webbapp med Azure App Service på Linux och MySQL.

De här anvisningarna gäller för alla databasanslutningar. Du måste fylla platshållarna med den valda databasens drivrutinsklassnamn och JAR-fil. Tillhandahålls är en tabell med klassnamn och drivrutinsnedladdningar för vanliga databaser.

Databas Namn på drivrutinsklass JDBC-drivrutin
PostgreSQL org.postgresql.Driver Ladda ned
MySQL com.mysql.jdbc.Driver Ladda ned (välj "Plattformsoberoende")
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Ladda ned

Om du vill konfigurera Tomcat att använda Java Database Connectivity (JDBC) eller Java Persistence API (JPA) anpassar CATALINA_OPTS du först miljövariabeln som tomcat läser in vid start. Ange dessa värden via en appinställning i Plugin-programmet App Service Maven:

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

Eller ange miljövariablerna på sidan Inställningar för konfigurationsprogram>i Azure Portal.

Bestäm sedan om datakällan ska vara tillgänglig för ett program eller för alla program som körs på Tomcat-servleten.

Datakällor på programnivå

  1. Skapa en context.xml fil i meta-INF/ -katalogen i projektet. Skapa meta-INF/-katalogen om den inte finns.

  2. I context.xml lägger du till ett Context element för att länka datakällan till en JNDI-adress. driverClassName Ersätt platshållaren med drivrutinens klassnamn från tabellen ovan.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Uppdatera programmets web.xml för att använda datakällan i ditt program.

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

Delade resurser på servernivå

Om du lägger till en delad datakälla på servernivå måste du redigera Tomcats server.xml. Det mest tillförlitliga sättet att göra detta på är följande:

  1. Ladda upp ett startskript och ange sökvägen till skriptet i Startkommando för konfiguration>. Du kan ladda upp startskriptet med FTP.

Startskriptet gör en xsl-transformering till server.xml-filen och matar ut den resulterande XML-filen till /usr/local/tomcat/conf/server.xml. Startskriptet ska installera libxslt via apk. XSL-filen och startskriptet kan laddas upp via FTP. Nedan visas ett exempel på ett startskript.

# 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

I följande exempel lägger XSL-filen till en ny anslutningsnod i 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>

Slutför konfigurationen

Placera slutligen drivrutins-JAR:erna i Tomcat-klassökvägen och starta om App Service.

  1. Kontrollera att JDBC-drivrutinsfilerna är tillgängliga för Tomcat-klassladdaren genom att placera dem i katalogen /home/site/lib . I Cloud Shell kör du az webapp deploy --type=lib för varje drivrutins-JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Om du har skapat en datakälla på servernivå startar du om App Service Linux-programmet. Tomcat återställs CATALINA_BASE till /home/tomcat och använder den uppdaterade konfigurationen.

Det finns tre grundläggande steg när du registrerar en datakälla med JBoss EAP: ladda upp JDBC-drivrutinen, lägga till JDBC-drivrutinen som en modul och registrera modulen. App Service är en tillståndslös värdtjänst, så konfigurationskommandona för att lägga till och registrera datakällmodulen måste skriptas och tillämpas när containern startar.

  1. Hämta databasens JDBC-drivrutin.

  2. Skapa en XML-moduldefinitionsfil för JDBC-drivrutinen. I följande exempel visas en moduldefinition för 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. Placera dina JBoss CLI-kommandon i en fil med namnet jboss-cli-commands.cli. JBoss-kommandona måste lägga till modulen och registrera den som en datakälla. I följande exempel visas JBoss CLI-kommandona för 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. Skapa ett startskript som startup_script.sh anropar JBoss CLI-kommandona. I följande exempel visas hur du anropar din jboss-cli-commands.cli. Senare konfigurerar du App Service för att köra det här skriptet när containern startar.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Med valfri FTP-klient laddar du upp JDBC-drivrutinen, jboss-cli-commands.cli, startup_script.shoch moduldefinitionen till /site/deployments/tools/.

  6. Konfigurera platsen så att den körs startup_script.sh när containern startar. I Azure Portal går du till Startkommando för konfiguration>av allmänna inställningar>. Ange startkommandofältet till /home/site/deployments/tools/startup_script.sh. Spara dina ändringar.

För att bekräfta att datakällan har lagts till i JBoss-servern, SSH i webbappen och kör $JBOSS_HOME/bin/jboss-cli.sh --connect. När du är ansluten till JBoss kör /subsystem=datasources:read-resource du för att skriva ut en lista över datakällorna.

Nästa steg

Besök Azure for Java Developers Center för att hitta Azure-snabbstarter, självstudier och Java-referensdokumentation.