Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo configurar orígenes de datos en una aplicación Java SE, Tomcat o JBoss en App Service.
Azure App Service ejecuta aplicaciones web Java en un servicio totalmente administrado en tres variantes:
- Java Standard Edition (SE): puede ejecutar una aplicación implementada como un paquete java Archive (JAR) que contenga un servidor incrustado (como Spring Boot, Quarkus, Dropwizard o una aplicación con un servidor de Tomcat o Jetty incrustado).
- Tomcat: el servidor de Tomcat integrado puede ejecutar una aplicación implementada como un paquete de archivo de aplicaciones web (WAR).
- JBoss Enterprise Application Platform (EAP): el servidor JBoss EAP integrado puede ejecutar una aplicación implementada como un paquete war o enterprise archive (EAR). Compatible con aplicaciones Linux en un conjunto de planes de tarifa que incluye Free, Premium v3 y Isolated v2.gti
Nota:
JBoss EAP en App Service ahora admite la facturación "Bring Your Own License" (BYOL), lo que permite a los clientes con suscripciones existentes de Red Hat aplicar esas licencias directamente a sus implementaciones de JBoss EAP en Azure App Service. Más información.
Configuración del origen de datos
Para conectarse a orígenes de datos en aplicaciones de Spring Boot, se recomienda crear cadenas de conexión e insertarlas en su archivo application.properties.
En la sección "Configuración" de la página de App Service, establezca un nombre para la cadena, pegue la cadena de conexión de JDBC en el campo de valor y establezca el tipo en "Custom" (Personalizado). Opcionalmente, puede establecer esta cadena de conexión como configuración de ranura.
Nuestra aplicación puede acceder a cadena de conexión como una variable de entorno denominada
CUSTOMCONNSTR_<your-string-name>. Por ejemplo,CUSTOMCONNSTR_exampledb.En su archivo application.properties, haga referencia a esta cadena de conexión con el nombre de variable de entorno. En nuestro ejemplo, se usaría el siguiente código:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Para obtener más información, consulte la documentación de Spring Boot relativa al acceso a datos y configuraciones externalizadas .
Sugerencia
Los contenedores de Tomcat en Linux pueden configurar automáticamente los orígenes de datos compartidos en el servidor de Tomcat estableciendo la variable de entorno WEBSITE_AUTOCONFIGURE_DATABASE en true. Lo único que debe hacer es agregar una configuración de aplicación que contenga una cadena de conexión JDBC válida a una base de datos Oracle, SQL Server, PostgreSQL o MySQL (incluyendo las credenciales de conexión) y App Service agrega automáticamente la base de datos compartida que corresponde a /usr/local/tomcat/conf/context.xml, mediante un controlador adecuado disponible en el contenedor. Para ver un escenario completo mediante este enfoque, consulte Tutorial: Compilación de una aplicación web de Tomcat con Azure App Service en Linux y MySQL.
Estas instrucciones se aplican a todas las conexiones de base de datos. Debe rellenar los marcadores de posición con el nombre de clase de controlador de la base de datos elegido y con el archivo JAR. Se proporciona una tabla con los nombres de clase y las descargas de controladores de las bases de datos más habituales.
| Base de datos | Nombre de clase de controlador | Controlador JDBC |
|---|---|---|
| PostgreSQL | org.postgresql.Driver |
Descargar |
| MySQL (en inglés) | com.mysql.jdbc.Driver |
Descargar (seleccione "Platform Independent") |
| Servidor SQL | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Descargar |
Para configurar Tomcat para que use Java Database Connectivity (JDBC) o Java Persistence API (JPA), personalice primero la variable de entorno CATALINA_OPTS que lee Tomcat al iniciarse. Establezca estos valores a través de una configuración de la aplicación en el complemento de Maven de App Service:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
O bien establezca las variables de entorno en la página Configuración>Configuración de la aplicación de Azure Portal.
A continuación, determine si el origen de datos debe estar disponible para una aplicación o para todas las aplicaciones que se ejecutan en el servlet de Tomcat.
Orígenes de datos de nivel de aplicación
Para configurar un origen de datos de nivel de aplicación:
Cree un archivo context.xml en el directorio META-INF / del proyecto. Si el directorio META-INF/ no existe, créelo.
En , context.xml, agregue un elemento
Contextpara vincular el origen de datos a una dirección JNDI. Reemplace el marcador de posicióndriverClassNamepor el nombre de clase de su controlador de la tabla anterior.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>Actualice el archivo web.xml de la aplicación para que use el origen de datos de su aplicación.
<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>
Recursos de nivel de servidor compartidos
Sugerencia
Los contenedores de Linux Tomcat pueden aplicar automáticamente archivos XSLT mediante la siguiente convención para los archivos copiados en /home/site/wwwroot: Si server.xml.xsl o server.xml.xslt están presentes, se aplicarán en el server.xml de Tomcat. Si context.xml.xsl o context.xml.xslt están presentes, se aplicarán a context.xml de Tomcat.
Para agregar un origen de datos compartido de nivel de servidor, es necesario editar el server.xmlarchivo de Tomcat. Dado que los cambios de archivo fuera del /home directorio son efímeros, los cambios en los archivos de configuración de Tomcat deben aplicarse mediante programación, como se indica a continuación:
- Cargue un script de inicio y establezca la ruta de acceso al script en Configuración>Comando de inicio. Puede cargar el script de inicio mediante FTP.
El script de inicio realiza una transformación XSL en el server.xml archivo y genera el archivo XML resultante en /usr/local/tomcat/conf/server.xml. El script de inicio debe instalar libxslt o xlstproc según la distribución de la versión de Tomcat de la aplicación web. El archivo XSL y el script de inicio se pueden cargar a través de FTP. A continuación se muestra un script de inicio de ejemplo.
# Install the libxslt package on Alpine-based images:
apk add --update libxslt
# Install the xsltproc package on Debian or Ubuntu-based images:
apt install xsltproc
# Also copy the transform file to /home/tomcat/conf/
# 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
El siguiente archivo XSL agrega un nuevo nodo de conector al archivo server.xml de 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(., '<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 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>
</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>
Finalización de la configuración
Por último, coloque los archivos JAR del controlador en la classpath de Tomcat y reinicie App Service.
- Asegúrese de que los archivos del controlador JDBC estén disponibles para el cargador de clases de Tomcat. Para ello, colóquelos en el directorio /home/site/lib. En Cloud Shell, ejecute
az webapp deploy --type=libpara cada archivo JAR del controlador:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Si ha creado un origen de datos de nivel de servidor, reinicie la aplicación App Service de Linux. Tomcat restablece CATALINA_BASE a /home/tomcat y usa la configuración actualizada.
Sugerencia
De forma predeterminada, los contenedores de JBoss de Linux pueden configurar automáticamente orígenes de datos compartidos por usted en el servidor de JBoss. Lo único que debe hacer es agregar una configuración de aplicación que contenga una cadena de conexión JDBC válida a una base de datos Oracle, SQL Server, PostgreSQL o MySQL (incluidas las credenciales de conexión) y agregue la variable WEBSITE_AUTOCONFIGURE_DATABASE App Setting /Environment con el valor true. También se admiten las conexiones JDBC creadas con Service Connector. App Service agrega automáticamente el origen de datos compartido correspondiente (basado en el nombre de configuración de la aplicación y el sufijo _DS), mediante un controlador adecuado disponible en el contenedor. Para ver un escenario completo mediante este enfoque, consulte Tutorial: Compilación de una aplicación web de JBoss con Azure App Service en Linux y MySQL.
Hay tres pasos principales a la hora de registrar un origen de datos con JBoss EAP:
- Cargue el controlador JDBC.
- Agregue el controlador JDBC como módulo.
- Agregue un origen de datos con el módulo.
App Service es un servicio de hospedaje sin estado, por lo que debe colocar estos pasos en un script de inicio y ejecutarlo cada vez que se inicie el contenedor de JBoss. Uso de PostgreSQL, MySQL y SQL Database como ejemplos:
Nota:
JBoss EAP en App Service ahora admite la facturación "Bring Your Own License" (BYOL), lo que permite a los clientes con suscripciones existentes de Red Hat aplicar esas licencias directamente a sus implementaciones de JBoss EAP en Azure App Service. Más información.
Coloque los comandos de la CLI de JBoss en un archivo denominado jboss-cli-commands.cli. Los comandos de JBoss deben agregar el módulo y registrarlo como un origen de datos. En el ejemplo siguiente se muestran los comandos de la CLI de JBoss para crear un origen de datos postgreSQL con el nombre 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=trueTenga en cuenta que el comando
module addusa tres variables de entorno (DB_HOST,DB_USERNAMEyDB_PASSWORD), que debe agregar en App Service como configuración de la aplicación. El script los agrega sin la marca--resolve-parameter-valuespara que JBoss no guarde sus valores en texto no cifrado.Cree un script de inicio, startup.sh, que llame a los comandos de la CLI de JBoss. En el ejemplo siguiente se muestra cómo llamar a su
jboss-cli-commands.cli. Más adelante, configurará App Service para ejecutar este script cuando se inicie el contenedor.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cliUsando una opción de implementación de su elección, cargue el controlador JDBC, jboss-cli-commands.cli, y startup.sh a las rutas de acceso especificadas en los scripts respectivos. Especialmente, cargue startup.sh como un archivo de inicio. Por ejemplo:
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 startupPara obtener más información, vea Implementación de archivos en App Service.
Para confirmar que el origen de datos se agregó al servidor JBoss, conéctese a su aplicación web mediante SSH y ejecute $JBOSS_HOME/bin/jboss-cli.sh --connect. Cuando se conecte a JBoss, ejecute /subsystem=datasources:read-resource para imprimir una lista de los orígenes de datos.
Tal como se define anteriormente jboss-cli-commands.cli, puede acceder a la conexión de PostgreSQL mediante el nombre JNDI java:jboss/datasources/postgresDS.
Contenido relacionado
Visite el centro de Azure para desarrolladores de Java para encontrar guías de inicio rápido de Azure, tutoriales y documentación de referencia de Java.