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 Kostnadsfri, 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 autentiseringsuppgifterna för anslutning) och App Service lägger automatiskt till motsvarande delade databas till /usr/local/tomcat/conf/context.xml 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.

Dricks

Som standard kan Linux JBoss-containrar automatiskt konfigurera delade datakällor åt dig på JBoss-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 motsvarande delade datakälla 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 JBoss-webbapp med Azure App Service på Linux och MySQL.

Det finns tre grundläggande steg när du registrerar en datakälla med JBoss EAP:

  1. Ladda upp JDBC-drivrutinen.
  2. Lägg till JDBC-drivrutinen som en modul.
  3. Lägg till en datakälla med modulen.

App Service är en tillståndslös värdtjänst, så du måste placera de här stegen i ett startskript och köra det varje gång JBoss-containern startar. Använd PostgreSQL, MySQL och SQL Database som exempel:

  1. 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 att skapa en PostgreSQL-datakälla med JNDI-namnet 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
    

    Observera att module add kommandot använder tre miljövariabler (DB_HOST, DB_USERNAME, och DB_PASSWORD), som du måste lägga till i App Service som appinställningar. Skriptet lägger till dem utan --resolve-parameter-values flaggan så att JBoss inte sparar sina värden i klartext.

  2. Skapa ett startskript, startup.sh, som 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/scripts/jboss_cli_commands.cli
    
  3. Med hjälp av ett distributionsalternativ laddar du upp JDBC-drivrutinen, jboss-cli-commands.cli och startup.sh till sökvägarna som anges i respektive skript. Ladda särskilt upp startup.sh som en startfil. Till exempel:

    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
    

    Mer information finns i Distribuera filer till App Service.

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.

Som definierats av jboss-cli-commands.cli tidigare kan du komma åt PostgreSQL-anslutningen med hjälp av JNDI-namnet java:jboss/datasources/postgresDS.

Nästa steg

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