Поделиться через


Настройка источников данных для приложения 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.

  1. В разделе "Конфигурация" на странице Службы приложений задайте имя строки, вставьте строку подключения JDBC в поле "Значение" и присвойте типу значение "Пользовательский". При необходимости можно задать эту строку подключения в качестве параметра слота.

    Эта строка подключения доступна для нашего приложения в виде переменной среды с именем CUSTOMCONNSTR_<your-string-name>. Например, CUSTOMCONNSTR_exampledb.

  2. В файле 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.

Источники данных уровня приложения

  1. Создайте файл context.xml в каталоге проекта META-INF/. Создайте каталог META-INF или, если он не существует.

  2. В 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>
    
  3. Обновите 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. Самый надежный способ сделать это следующим образом:

  1. Отправьте скрипт запуска и задайте путь к скрипту в команде запуска конфигурации>. Сценарий запуска можно добавить с помощью 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(., '&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>

Завершение конфигурации

Наконец, разместите JAR-файлы драйверов в пути к классам Tomcat и перезапустите службу приложений.

  1. Убедитесь, что файлы драйверов 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:

  1. Отправьте драйвер JDBC.
  2. Добавьте драйвер JDBC в качестве модуля.
  3. Добавьте источник данных с модулем.

Служба приложений — это служба размещения без отслеживания состояния, поэтому необходимо поместить эти шаги в скрипт запуска и запустить его при каждом запуске контейнера JBoss. Использование PostgreSQL, MySQL и База данных SQL в качестве примеров:

  1. Вставьте команды интерфейса командной строки 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 не сохранял их значения в виде открытого текста.

  2. Создайте скрипт запуска startup.sh, который вызывает команды JBoss CLI. В следующем примере показано, как вызвать объект jboss-cli-commands.cli. Позже вы настроите Служба приложений для запуска этого скрипта при запуске контейнера.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cli
    
  3. Используя вариант развертывания, отправьте драйвер 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/postgresDSJNDI.

Следующие шаги

Посетите центр Azure для разработчиков Java, чтобы найти краткие руководства Azure, руководства и справочную документацию по Java.