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 Free, 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.
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
.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 bijbehorende 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
Maak een context.xml-bestand in de META-INF/ -map van uw project. Maak de META-INF/ -map als deze niet bestaat.
Voeg in context.xml een
Context
element toe om de gegevensbron te koppelen aan een JNDI-adres. Vervang de tijdelijke aanduiding door dedriverClassName
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>
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:
- 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(., '<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>
Configuratie voltooien
Plaats ten slotte het stuurprogramma-JAR's in het Tomcat-klassepad en start uw App Service opnieuw op.
- 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.
Tip
Standaard kunnen de Linux JBoss-containers automatisch gedeelde gegevensbronnen voor u configureren op de JBoss-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 bijbehorende gedeelde gegevensbron toe met behulp van een geschikt stuurprogramma dat beschikbaar is in de container. Zie Zelfstudie: Een JBoss-web-app bouwen met Azure-app Service op Linux en MySQL voor een end-to-end scenario met behulp van deze benadering.
Er zijn drie kernstappen bij het registreren van een gegevensbron bij JBoss EAP:
- Upload het JDBC-stuurprogramma.
- Voeg het JDBC-stuurprogramma toe als een module.
- Voeg een gegevensbron toe met de module.
App Service is een staatloze hostingservice, dus u moet deze stappen in een opstartscript plaatsen en uitvoeren telkens wanneer de JBoss-container wordt gestart. PostgreSQL, MySQL en SQL Database gebruiken als voorbeelden:
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 het maken van een PostgreSQL-gegevensbron met de JNDI-naam
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
Houd er rekening mee dat de
module add
opdracht gebruikmaakt van drie omgevingsvariabelen (DB_HOST
DB_USERNAME
enDB_PASSWORD
) die u als app-instellingen in App Service moet toevoegen. Het script voegt ze toe zonder de--resolve-parameter-values
vlag, zodat JBoss de waarden niet in tekst zonder opmaak opslaat.Maak een opstartscript, startup.sh, dat de JBoss CLI-opdrachten aanroept. In het volgende voorbeeld ziet u hoe u uw
jboss-cli-commands.cli
aanroept. 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/scripts/jboss_cli_commands.cli
Upload met behulp van een implementatieoptie naar keuze uw JDBC-stuurprogramma, jboss-cli-commands.cli en startup.sh naar de paden die zijn opgegeven in de respectieve scripts. Upload startup.sh met name als opstartbestand. Voorbeeld:
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
Zie Bestanden implementeren in App Service voor meer informatie.
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.
Zoals eerder gedefinieerd door jboss-cli-commands.cli , hebt u toegang tot de PostgreSQL-verbinding met behulp van de JNDI-naam java:jboss/datasources/postgresDS
.
Volgende stappen
Ga naar het Azure voor Java-ontwikkelaarscentrum om azure-snelstartgidsen, zelfstudies en Java-referentiedocumentatie te vinden.