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


Настройка источников данных для приложения 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 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>&#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 EAP необходимо выполнить три основных шага: передать драйвер JDBC, добавить драйвер JDBC в качестве модуля и зарегистрировать модуль. Служба приложений — это служба размещения без отслеживания состояния, поэтому команды конфигурации для добавления и регистрации модуля источника данных необходимо внести в скрипт и применить при запуске контейнера.

  1. Получите драйвер JDBC для базы данных.

  2. Создайте файл определения модуля 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>
    
  3. Вставьте команды интерфейса командной строки 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
    
  4. Создайте сценарий запуска startup_script.sh, который вызывает команды интерфейса командной строки JBoss. В следующем примере показано, как вызвать объект jboss-cli-commands.cli. Позже вы настроите Служба приложений для запуска этого скрипта при запуске контейнера.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. С помощью любого FTP-клиента передайте драйвер JDBC jboss-cli-commands.cli, startup_script.sh и определение модуля в /site/deployments/tools/.

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