Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить источники данных в приложениях Java SE, Tomcat или JBoss в Службе приложений.
Служба Azure App Service запускает веб-приложения Java в полностью управляемой среде в трех вариантах.
- Java Standard Edition (SE): может запускать приложение, развернутое в виде пакета JAR-файла Java, содержащего внедренный сервер (например, Spring Boot, Quarkus, Dropwizard или приложение с внедренным сервером Tomcat или Jetty).
- Tomcat: встроенный сервер Tomcat может запускать приложение, развернутое как архив веб-приложения (WAR).
- Платформа корпоративных приложений JBoss (EAP): встроенный сервер JBoss EAP может запускать приложение, развернутое как пакет WAR или корпоративного архива (EAR). Поддерживается для приложений Linux в наборе ценовых категорий, включая бесплатный, Premium v3 и Isolated v2.
Замечание
JBoss EAP в службе App Service теперь поддерживает биллинг "Принести собственную лицензию" (BYOL), что позволяет клиентам с существующими подписками Red Hat применять эти лицензии непосредственно к развертываниям JBoss EAP в Службе приложений Azure. Подробнее.
Настройка источника данных
Чтобы подключиться к источникам данных в приложениях Spring Boot, мы рекомендуем создавать строки подключения и внедрять их в файл application.properties.
В разделе "Конфигурация" на странице Службы приложений установите имя для строки, вставьте строку подключения JDBC в поле "Значение" и установите тип на "Пользовательский". При необходимости можно задать эту строку подключения в качестве параметра слота.
Эта строка подключения доступна для нашего приложения в виде переменной среды с именем
CUSTOMCONNSTR_<your-string-name>. Например,CUSTOMCONNSTR_exampledb.В файле application.properties нужно сослаться на эту строку подключения с именем переменной среды. В нашем примере мы будем использовать следующий код:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Дополнительные сведения см. в документации spring Boot по доступу к данным и внешним конфигурациям.
Совет
Контейнеры Linux Tomcat могут автоматически настраивать общие источники данных на сервере Tomcat, задав переменную среды WEBSITE_AUTOCONFIGURE_DATABASE на true. Единственное, что вам нужно сделать, — это добавить настройку приложения, содержащую допустимую строку подключения JDBC к базе данных Oracle, SQL Server, PostgreSQL или MySQL (включая учетные данные подключения), и App Service автоматически добавляет соответствующую базу данных в /usr/local/tomcat/conf/context.xml, используя соответствующий драйвер, доступный в контейнере. Комплексный сценарий с помощью этого подхода см. в руководстве по созданию веб-приложения Tomcat с помощью службы приложение Azure в Linux и MySQL.
Эти инструкции применимы ко всем подключениям к базе данных. Заполнители необходимо заполнить именем класса драйвера выбранной базы данных и JAR-файлом. Ниже приведена таблица с именами классов и ссылками для скачивания драйверов для распространенных баз данных.
| База данных | Имя класса драйвера | драйвер JDBC. |
|---|---|---|
| PostgreSQL | org.postgresql.Driver |
Скачать |
| MySQL | com.mysql.jdbc.Driver |
Скачать (выберите "Независимо от платформы") |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Скачать |
Чтобы настроить Tomcat для использования Java Database Connectivity (JDBC) или Java Persistence API (JPA), сначала настройте переменную среды CATALINA_OPTS, считываемую Tomcat при запуске. Задайте эти значения через настройку в приложении с помощью Maven-плагина для App Service:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Переменные среды можно также задать на странице Конфигурация>Параметры приложения на портале Azure.
Затем определите, должен ли источник данных быть доступным для одного приложения или для всех приложений, работающих в сервлете Tomcat.
Источники данных уровня приложения
Чтобы настроить источник данных на уровне приложения, выполните следующие действия.
Создайте файл context.xml в каталоге проекта META-INF/. Создайте каталог META-INF или, если он не существует.
В context.xml добавьте элемент
Context, чтобы связать источник данных с адресом JNDI. Замените заполнительdriverClassNameименем класса драйвера из приведенной выше таблицы.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>Обновите web.xml приложения для использования источника данных в этом приложении.
<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>
Общие ресурсы уровня сервера
Совет
Контейнеры Linux Tomcat могут автоматически применять XSLT-файлы с помощью следующего соглашения для файлов, скопированных в /home/site/wwwroot: когда server.xml.xsl или server.xml.xslt присутствуют, они будут применены Tomcat к server.xml. Если context.xml.xsl или context.xml.xslt в наличии, они будут применены к Tomcat context.xml.
Добавление общего источника данных на уровне сервера требует редактирования Tomcat server.xml. Так как изменения файлов за пределами /home каталога являются временными, изменения файлов конфигурации Tomcat должны применяться программно, как показано ниже.
- Отправьте скрипт запуска и задайте путь к скрипту в . Сценарий запуска можно добавить с помощью FTP.
Скрипт запуска выполняет преобразование XSL для файла server.xml и выводит полученный XML-файл в /usr/local/tomcat/conf/server.xml. Скрипт запуска должен устанавливать libxslt или xlstproc в зависимости от распространения версии Tomcat веб-приложения. Файл XSL и скрипт запуска можно отправить через FTP. Ниже приведен пример скрипта запуска.
# 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
В следующем примере XSL-файл добавляет новый узел соединителя в 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(., '<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>
Завершение конфигурации
Разместите файлы JAR драйверов в класспате Tomcat, а затем перезапустите службу приложений.
- Убедитесь, что файлы драйверов JDBC доступны для классзагрузчика Tomcat, поместив их в каталог /home/site/lib .
В Cloud Shell запустите
az webapp deploy --type=libдля каждого JAR-файла драйвера:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Если вы создали источник данных на уровне сервера, перезапустите приложение Linux службы приложений. Tomcat сбрасывает CATALINA_BASE на /home/tomcat и использует обновленную конфигурацию.
Совет
По умолчанию контейнеры JBoss для Linux могут автоматически настраивать общие источники данных для вас на сервере JBoss. Единственное, что необходимо сделать, — добавить параметр приложения, содержащий допустимую строку подключения JDBC к базе данных Oracle, SQL Server, PostgreSQL или MySQL (включая учетные данные подключения) и добавьте переменную WEBSITE_AUTOCONFIGURE_DATABASE параметра приложения или среды со значением true. Также поддерживаются подключения JDBC, созданные с помощью соединителя служб. Служба приложений автоматически добавляет соответствующий общий источник данных (на основе имени параметра приложения и суффикса _DS), используя соответствующий драйвер, доступный в контейнере. Комплексный сценарий с помощью этого подхода см. в руководстве по созданию веб-приложения JBoss с помощью службы приложение Azure в Linux и MySQL.
Существует три основных шага при регистрации источника данных в JBoss EAP:
- Отправьте драйвер JDBC.
- Добавьте драйвер JDBC в качестве модуля.
- Добавьте источник данных с помощью модуля.
Служба приложений — это служба размещения без отслеживания состояния, поэтому необходимо поместить эти шаги в скрипт запуска и запустить его при каждом запуске контейнера JBoss. Использование PostgreSQL, MySQL и Базы данных SQL в качестве примеров:
Замечание
JBoss EAP в службе App Service теперь поддерживает биллинг "Принести собственную лицензию" (BYOL), что позволяет клиентам с существующими подписками Red Hat применять эти лицензии непосредственно к развертываниям JBoss EAP в Службе приложений Azure. Подробнее.
Вставьте команды интерфейса командной строки JBoss в файл с именем jboss-cli-commands.cli. Команды JBoss должны добавить модуль и зарегистрировать его в качестве источника данных. В следующем примере показаны команды интерфейса командной строки JBoss для создания источника данных PostgreSQL с именем
java:jboss/datasources/postgresDSJNDI.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Обратите внимание, что команда
module addиспользует три переменные среды (DB_HOST,DB_USERNAMEиDB_PASSWORD), которые необходимо добавить в Служба приложений в качестве параметров приложения. Скрипт добавляет их без флага--resolve-parameter-values, чтобы JBoss не сохранял их значения в виде открытого текста.Создайте скрипт запуска startup.sh, который вызывает команды JBoss CLI. В следующем примере показано, как вызвать объект
jboss-cli-commands.cli. Позже вы настроите Служба приложений для запуска этого скрипта при запуске контейнера.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cliИспользуя вариант развертывания по вашему выбору, загрузите ваш драйвер JDBC, jboss-cli-commands.cli и startup.sh в пути, указанные в соответствующих сценариях. Особенно отправьте startup.sh в качестве файла запуска. Например:
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Дополнительные сведения см. в разделе "Развертывание файлов в Служба приложений".
Чтобы убедиться, что источник данных был добавлен на сервер JBoss, подключитесь по SSH к вашему веб-приложению и запустите команду $JBOSS_HOME/bin/jboss-cli.sh --connect. После подключения к JBoss запустите /subsystem=datasources:read-resource, чтобы вывести список источников данных.
Как ранее определено в jboss-cli-commands.cli, вы можете получить доступ к подключению PostgreSQL с помощью имени java:jboss/datasources/postgresDS JNDI.
Связанный контент
Посетите центр Azure для разработчиков Java, чтобы найти быстрые руководства по Azure, учебники и справочную документацию по Java.