Настройка источников данных для приложения Tomcat, JBoss или Java SE в службе приложение Azure
В этой статье показано, как настроить источники данных в приложении Java SE, Tomcat или JBoss в Служба приложений.
приложение Azure служба запускает веб-приложения Java в полностью управляемой службе в трех вариантах:
- Java SE — может запускать приложение, развернутое как JAR-пакет, содержащий внедренный сервер (например, Spring Boot, Dropwizard, Quarkus или один с внедренным сервером Tomcat или Jetty).
- Tomcat — встроенный сервер Tomcat может запускать приложение, развернутое как пакет WAR.
- JBoss EAP — поддерживается только для приложений Linux в ценовой категории "Бесплатный", "Премиум" версии 3 и "Изолированный" версии 2. Встроенный сервер JBoss EAP может запускать приложение, развернутое как пакет WAR или EAR.
Примечание.
Для приложений Spring рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать службу приложение Azure в качестве назначения. Рекомендации по назначению рабочей нагрузки Java см. в руководстве по назначению рабочей нагрузки Java.
Настройка источника данных
Чтобы подключиться к источникам данных в приложениях Spring Boot, мы рекомендуем создавать строки подключения и внедрять их в файл application.properties.
В разделе "Конфигурация" на странице Службы приложений задайте имя строки, вставьте строку подключения JDBC в поле "Значение" и присвойте типу значение "Пользовательский". При необходимости можно задать эту строку подключения в качестве параметра слота.
Эта строка подключения доступна для нашего приложения в виде переменной среды с именем
CUSTOMCONNSTR_<your-string-name>
. Например,CUSTOMCONNSTR_exampledb
.В файле application.properties нужно сослаться на эту строку подключения с именем переменной среды. В нашем примере мы будем использовать следующий код:
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Дополнительные сведения см. в документации spring Boot по доступу к данным и внешним конфигурациям.
Совет
По умолчанию контейнеры Linux Tomcat могут автоматически настраивать общие источники данных для вас на сервере Tomcat. Единственное, что необходимо сделать, — добавить параметр приложения, содержащий допустимый JDBC строка подключения в базу данных Oracle, SQL Server, PostgreSQL или MySQL (включая учетные данные подключения), а Служба приложений автоматически добавляет соответствующую общую базу данных в /usr/local/tomcat/conf/context.xml, используя соответствующий драйвер, доступный в контейнере. Комплексный сценарий с помощью этого подхода см. в руководстве по созданию веб-приложения Tomcat с помощью службы приложение Azure в Linux и MySQL.
Эти инструкции применимы ко всем подключениям к базе данных. Заполнители необходимо заполнить именем класса драйвера выбранной базы данных и JAR-файлом. Ниже приведена таблица с именами классов и ссылками для скачивания драйверов для распространенных баз данных.
База данных | Имя класса драйвера | драйвер JDBC. |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Скачать |
MySQL | com.mysql.jdbc.Driver |
Скачать (выберите "Platform Independent" (Независимо от платформы)) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Скачать |
Чтобы настроить Tomcat для использования Java Database Connectivity (JDBC) или Java Persistence API (JPA), сначала настройте переменную среды CATALINA_OPTS
, считываемую Tomcat при запуске. Задайте эти значения с помощью параметра приложения в подключаемом модуле Maven для службы приложений:
<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>
Общие ресурсы уровня сервера
Добавление общего источника данных на уровне сервера требует редактирования server.xml Tomcat. Самый надежный способ сделать это следующим образом:
- Отправьте скрипт запуска и задайте путь к скрипту в команде запуска конфигурации>. Сценарий запуска можно добавить с помощью FTP.
Скрипт запуска выполняет преобразование xsl в файл server.xml и выводит полученный XML-файл /usr/local/tomcat/conf/server.xml
в . Сценарий запуска должен установить libxslt через apk. XSL-файл и скрипт запуска можно отправить через FTP. Ниже приведен пример скрипта запуска.
# 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
В следующем примере 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 (включая учетные данные подключения), а Служба приложений автоматически добавляет соответствующий общий источник данных, используя соответствующий драйвер, доступный в контейнере. Комплексный сценарий с помощью этого подхода см. в руководстве по созданию веб-приложения JBoss с помощью службы приложение Azure в Linux и MySQL.
Существует три основных шага при регистрации источника данных в JBoss EAP:
- Отправьте драйвер JDBC.
- Добавьте драйвер JDBC в качестве модуля.
- Добавьте источник данных с модулем.
Служба приложений — это служба размещения без отслеживания состояния, поэтому необходимо поместить эти шаги в скрипт запуска и запустить его при каждом запуске контейнера JBoss. Использование PostgreSQL, MySQL и База данных SQL в качестве примеров:
Вставьте команды интерфейса командной строки JBoss в файл с именем jboss-cli-commands.cli. Команды JBoss должны добавить модуль и зарегистрировать его в качестве источника данных. В следующем примере показаны команды интерфейса командной строки JBoss для создания источника данных PostgreSQL с именем
java:jboss/datasources/postgresDS
JNDI.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.