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.
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
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å
Skapa en context.xml fil i meta-INF/ -katalogen i projektet. Skapa meta-INF/-katalogen om den inte finns.
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>
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:
- 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(., '<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 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>
</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.
- 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:
- Ladda upp JDBC-drivrutinen.
- Lägg till JDBC-drivrutinen som en modul.
- 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:
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
, ochDB_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.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
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.