Настройка источников данных для приложения 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 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>
Завершение конфигурации
Наконец, разместите 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 EAP необходимо выполнить три основных шага: передать драйвер JDBC, добавить драйвер JDBC в качестве модуля и зарегистрировать модуль. Служба приложений — это служба размещения без отслеживания состояния, поэтому команды конфигурации для добавления и регистрации модуля источника данных необходимо внести в скрипт и применить при запуске контейнера.
Получите драйвер JDBC для базы данных.
Создайте файл определения модуля XML для драйвера JDBC. В следующем примере показано определение модуля для PostgreSQL.
<?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.1" name="org.postgres"> <resources> <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******--> <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Вставьте команды интерфейса командной строки JBoss в файл
jboss-cli-commands.cli
. Команды JBoss должны добавить модуль и зарегистрировать его в качестве источника данных. В следующем примере показаны команды интерфейса командной строки JBoss для PostgreSQL.#!/usr/bin/env bash module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
Создайте сценарий запуска
startup_script.sh
, который вызывает команды интерфейса командной строки JBoss. В следующем примере показано, как вызвать объектjboss-cli-commands.cli
. Позже вы настроите Служба приложений для запуска этого скрипта при запуске контейнера.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
С помощью любого FTP-клиента передайте драйвер JDBC
jboss-cli-commands.cli
,startup_script.sh
и определение модуля в/site/deployments/tools/
.Настройте сайт для выполнения
startup_script.sh
при запуске контейнера. На портале Azure перейдите к разделу Конфигурация>Общие параметры>Команда запуска. Задайте полю "Команда запуска" значение/home/site/deployments/tools/startup_script.sh
. Сохраните свои изменения.
Чтобы убедиться в том, что источник данных добавлен на сервер JBoss, установите SSH-подключение к веб-приложению и запустите $JBOSS_HOME/bin/jboss-cli.sh --connect
. После подключения к JBoss запустите /subsystem=datasources:read-resource
список источников данных.
Следующие шаги
Посетите центр Azure для разработчиков Java, чтобы найти краткие руководства Azure, руководства и справочную документацию по Java.