Partager via


Configurer des sources de données pour une application Tomcat, JBoss ou Java SE dans Azure App Service

Cet article présente comment configurer des sources de données dans une application Java SE, Tomcat ou JBoss dans App Service.

Azure App Service exécute des applications web Java sur un service complètement géré en trois variantes :

  • Java SE : peut exécuter une application déployée en tant que package JAR qui contient un serveur incorporé (par exemple Spring Boot, Dropwizard, Quarkus ou avec un serveur Tomcat ou Jetty incorporé).
  • Tomcat : le serveur Tomcat intégré peut exécuter une application déployée en tant que package WAR.
  • JBoss EAP – Pris en charge pour les applications Linux seulement dans les niveaux de tarification Gratuit, Premium v3 et Isolé v2. Le serveur JBoss EAP intégré peut exécuter une application déployée en tant que package WAR ou EAR.

Remarque

Pour les applications Spring, nous vous recommandons d’utiliser Azure Spring Apps. Toutefois, vous pouvez toujours utiliser Azure App Service comme destination. Pour obtenir des conseils, consultez l’Aide de destination de la charge de travail Java.

Configurer la source de données

Pour vous connecter à des sources de données dans des applications Spring Boot, nous vous suggérons de créer des chaînes de connexion et de les injecter dans votre fichier application.properties.

  1. Dans la section « Configuration » de la page App Service, définissez un nom pour la chaîne, collez votre chaîne de connexion JDBC dans le champ de valeur, puis définissez le type sur « Personnalisé ». Vous pouvez éventuellement définir cette chaîne de connexion en tant que paramètre d’emplacement.

    Cette chaîne de connexion est accessible à notre application en tant que variable d’environnement nommée CUSTOMCONNSTR_<your-string-name>. Par exemple : CUSTOMCONNSTR_exampledb.

  2. Dans votre fichier application.properties, référencez cette chaîne de connexion avec le nom de variable d’environnement. Dans notre exemple, nous utiliserons ce qui suit :

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Pour plus d’informations, consultez la documentation Spring Boot sur l’accès aux données et les configurations externalisées.

Conseil

Par défaut, les conteneurs Linux Tomcat peuvent automatiquement configurer des sources de données partagées pour vous dans le serveur Tomcat. La seule chose que vous devez faire est d'ajouter un paramètre d'application contenant une chaîne de connexion JDBC valide à une base de données Oracle, SQL Server, PostgreSQL ou MySQL (y compris les informations d'identification de connexion), et App Service ajoute automatiquement la base de données partagée correspondante à /usr/local/tomcat/conf/context.xml, à l'aide d'un pilote approprié disponible dans le conteneur. Pour découvrir un scénario de bout en bout en utilisant cette approche, consultez Tutoriel : Créer une application web Tomcat avec Azure App Service sur Linux et MySQL.

Ces instructions s’appliquent à toutes les connexions de base de données. Vous devez remplir les espaces réservés avec le nom de la classe du pilote de la base de données que vous avez choisie ainsi que le fichier JAR. Vous disposez d’une table contenant des noms de classes et de téléchargements de pilotes pour les bases de données courantes.

Base de données Nom de la classe du pilote Pilote JDBC
PostgreSQL org.postgresql.Driver Télécharger
MySQL com.mysql.jdbc.Driver Télécharger (sélectionnez « Indépendant de la plateforme »)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Télécharger

Pour configurer Tomcat afin d’utiliser Java Database Connectivity (JDBC) ou l’API Java Persistence (JPA), commencez par personnaliser la variable d’environnement CATALINA_OPTS lue par Tomcat au démarrage. Définissez ces valeurs via un paramètre d’application dans le plug-in Maven App Service :

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

Ou définissez les variables d’environnement dans la page Configuration>Paramètres d’application du portail Azure.

Ensuite, déterminez si la source de données doit être mise à la disposition d’une seule application ou de toutes les applications exécutées sur le servlet Tomcat.

Sources de données au niveau de l’application

  1. Créez un fichier context.xml dans le répertoire META-INF / de votre projet. Créez le répertoire META-INF/ s’il n’existe pas.

  2. Dans context.xml, ajoutez un élément Context pour lier la source de données à une adresse JNDI. Remplacez l’espace réservé driverClassName par le nom de la classe de votre pilote à l’aide du tableau ci-dessus.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Mettez à jour le fichier web.xml de votre application pour utiliser la source de données dans votre application.

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

Ressources au niveau du serveur partagées

Pour ajouter une source de données partagée au niveau du serveur, vous devez modifier le fichier server.xml de Tomcat. La méthode la plus fiable pour le faire est la suivante :

  1. Chargez un script de démarrage et définissez le chemin d’accès au script dans Configuration>Commande de démarrage. Vous pouvez télécharger le script de démarrage à l’aide de FTP.

Votre script de démarrage crée une transformation XSL sur le fichier server.xml et génère le fichier xml résultant sur /usr/local/tomcat/conf/server.xml. Le script de démarrage doit installer libxslt via apk. Votre fichier xsl et votre script de démarrage peuvent être téléchargés via FTP. Vous trouverez ci-dessous un exemple de script de démarrage.

# 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

L’exemple de fichier XSL suivant ajoute un nouveau nœud de connecteur au fichier server.xml Tomcat.

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

Finaliser la configuration

Enfin, placez les fichiers du pilote JAR dans le classpath Tomcat puis redémarrez votre App Service.

  1. Veillez à ce que les fichiers du pilote JDBC soient disponibles pour le chargeur de classes Tomcat en les mettant dans le répertoire /home/site/lib. Dans Cloud Shell, exécutez az webapp deploy --type=lib pour chaque fichier JAR de pilote :
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Si vous avez créé une source de données de niveau serveur, redémarrez l’application App Service Linux. Tomcat rétablit CATALINA_BASE sur /home/tomcat et utilise la configuration mise à jour.

Conseil

Par défaut, les conteneurs Linux JBoss peuvent configurer automatiquement des sources de données partagées pour vous sur le serveur JBoss. La seule chose que vous devez faire est d'ajouter un paramètre d'application contenant une chaîne de connexion JDBC valide à une base de données Oracle, SQL Server, PostgreSQL ou MySQL (y compris les informations d'identification de connexion), et App Service ajoute automatiquement la source de données partagée correspondante, à l'aide d'un pilote approprié disponible dans le conteneur. Pour un scénario de bout en bout utilisant cette approche, consultez Tutoriel : Créer une application Web JBoss avec Azure App Service sur Linux et MySQL.

Il y a trois étapes principales lors de l'enregistrement d'une source de données avec JBoss EAP :

  1. Téléchargez le pilote JDBC.
  2. Ajoutez le pilote JDBC en tant que module.
  3. Ajoutez une source de données avec le module.

App Service est un service d'hébergement sans état, vous devez donc placer ces étapes dans un script de démarrage et l'exécuter à chaque démarrage du conteneur JBoss. En utilisant PostgreSQL, MySQL et SQL Database comme exemples :

  1. Placez vos commandes CLI JBoss dans un fichier nommé jboss-cli-commands.cli. Les commandes JBoss doivent ajouter le module et l’inscrire en tant que source de données. L'exemple suivant montre les commandes CLI JBoss pour créer une source de données PostgreSQL avec le nom JNDI 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
    

    Notez que la commande module add utilise trois variables d’environnement (DB_HOST, DB_USERNAME et DB_PASSWORD), que vous devez ajouter dans App Service en tant que paramètres d’application. Le script les ajoute sans l'indicateur --resolve-parameter-values afin que JBoss n'enregistre pas leurs valeurs en texte brut.

  2. Créez un script de démarrage, startup.sh, qui appelle les commandes JBoss CLI. L'exemple suivant montre comment nommer votre jboss-cli-commands.cli. Plus tard, vous configurerez App Service pour exécuter ce script au démarrage du conteneur.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cli
    
  3. À l’aide d’une option de déploiement de votre choix, téléchargez votre pilote JDBC, jboss-cli-commands.cli et startup.sh vers les chemins spécifiés dans les scripts respectifs. En particulier, téléchargez startup.sh comme fichier de démarrage. Par exemple :

    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
    

    Pour plus d’informations, voir Déployer des fichiers vers App Service.

Pour confirmer que la source de données a été ajoutée au serveur JBoss, connectez-vous à votre application Web en SSH et exécutez $JBOSS_HOME/bin/jboss-cli.sh --connect. Une fois connecté à JBoss, exécutez /subsystem=datasources:read-resource pour imprimer une liste des sources de données.

Comme défini précédemment par jboss-cli-commands.cli, vous pouvez accéder à la connexion PostgreSQL en utilisant le nom JNDI java:jboss/datasources/postgresDS.

Étapes suivantes

Visitez le centre Azure pour les développeurs Java pour trouver des guides de démarrage rapide Azure, des tutoriels et la documentation de référence Java.