Udostępnij za pośrednictwem


Konfigurowanie źródeł danych dla aplikacji Tomcat, JBoss lub Java SE w usłudze aplikacja systemu Azure Service

W tym artykule pokazano, jak skonfigurować źródła danych w aplikacji Java SE, Tomcat lub JBoss w usłudze App Service.

usługa aplikacja systemu Azure uruchamia aplikacje internetowe Java w w pełni zarządzanej usłudze w trzech wariantach:

  • Java SE — może uruchomić aplikację wdrożoną jako pakiet JAR zawierający serwer osadzony (taki jak Spring Boot, Dropwizard, Quarkus lub jeden z osadzonym serwerem Tomcat lub Jetty).
  • Tomcat — wbudowany serwer Tomcat może uruchamiać aplikację wdrożona jako pakiet WAR.
  • JBoss EAP — obsługiwane tylko w przypadku aplikacji systemu Linux w warstwach cenowych Premium v3 i Izolowanych w wersji 2. Wbudowany serwer JBoss EAP może uruchamiać aplikację wdrożona jako pakiet WAR lub EAR.

Uwaga

W przypadku aplikacji Spring zalecamy używanie usługi Azure Spring Apps. Można jednak nadal używać usługi aplikacja systemu Azure jako miejsca docelowego. Aby uzyskać porady, zobacz Wskazówki dotyczące miejsca docelowego obciążenia w języku Java.

Konfigurowanie źródła danych

Aby nawiązać połączenie ze źródłami danych w aplikacjach Spring Boot, zalecamy utworzenie parametry połączenia i wstrzyknięcie ich do pliku application.properties.

  1. W sekcji "Konfiguracja" strony usługi App Service ustaw nazwę ciągu, wklej parametry połączenia JDBC w polu wartości i ustaw typ na "Niestandardowy". Opcjonalnie możesz ustawić tę parametry połączenia jako ustawienie miejsca.

    Ta parametry połączenia jest dostępna dla naszej aplikacji jako zmienna środowiskowa o nazwie CUSTOMCONNSTR_<your-string-name>. Na przykład CUSTOMCONNSTR_exampledb.

  2. W pliku application.properties odwołaj się do tego parametry połączenia z nazwą zmiennej środowiskowej. W naszym przykładzie użyjemy następującego kodu:

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Aby uzyskać więcej informacji, zobacz dokumentację platformy Spring Boot dotyczącą dostępu do danych i konfiguracji zewnętrznych.

Napiwek

Domyślnie kontenery tomcat systemu Linux mogą automatycznie konfigurować udostępnione źródła danych na serwerze Tomcat. Jedyne, co należy zrobić, to dodanie ustawienia aplikacji zawierającego prawidłową parametry połączenia JDBC do bazy danych Oracle, SQL Server, PostgreSQL lub MySQL (w tym poświadczeń połączenia), a usługa App Service automatycznie dodaje współzarządzającą udostępnioną bazę danych do /usr/local/tomcat/conf/context.xml, używając odpowiedniego sterownika dostępnego w kontenerze. Aby uzyskać kompleksowe scenariusze korzystające z tego podejścia, zobacz Samouczek: tworzenie aplikacji internetowej Tomcat przy użyciu usługi aplikacja systemu Azure Service w systemach Linux i MySQL.

Te instrukcje dotyczą wszystkich połączeń bazy danych. Należy wypełnić symbole zastępcze nazwą klasy sterownika wybranej bazy danych i plikiem JAR. Podano tabelę zawierającą nazwy klas i pliki do pobrania sterowników dla typowych baz danych.

baza danych Nazwa klasy sterownika Sterownikiem JDBC
PostgreSQL org.postgresql.Driver Pobierz
MySQL com.mysql.jdbc.Driver Pobierz (wybierz pozycję "Niezależna od platformy")
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Pobierz

Aby skonfigurować serwer Tomcat do używania interfejsu Java Database Connectivity (JDBC) lub interfejsu API trwałości języka Java (JPA), najpierw dostosuj CATALINA_OPTS zmienną środowiskową odczytaną przez serwer Tomcat podczas uruchamiania. Ustaw te wartości za pomocą ustawienia aplikacji w wtyczki App Service Maven:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

Możesz też ustawić zmienne środowiskowe na stronie Ustawienia aplikacji konfiguracji>w witrynie Azure Portal.

Następnie ustal, czy źródło danych powinno być dostępne dla jednej aplikacji, czy dla wszystkich aplikacji uruchomionych w serwletze Tomcat.

Źródła danych na poziomie aplikacji

  1. Utwórz plik context.xml w katalogu META-INF/ projektu. Utwórz katalog META-INF/, jeśli nie istnieje.

  2. W context.xml dodaj Context element, aby połączyć źródło danych z adresem JNDI. Zastąp driverClassName symbol zastępczy nazwą klasy sterownika z powyższej tabeli.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Zaktualizuj web.xml aplikacji, aby użyć źródła danych w aplikacji.

    <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>
    

Udostępnione zasoby na poziomie serwera

Dodanie udostępnionego źródła danych na poziomie serwera wymaga edytowania server.xml serwera. Najbardziej niezawodnym sposobem, aby to zrobić, jest następująca:

  1. Przekaż skrypt uruchamiania i ustaw ścieżkę do skryptu w poleceniu uruchamiania konfiguracji>. Skrypt uruchamiania można przekazać przy użyciu protokołu FTP.

Skrypt uruchamiania wykonuje przekształcenie xsl w pliku server.xml i wyprowadza wynikowy plik XML do /usr/local/tomcat/conf/server.xml. Skrypt uruchamiania powinien zainstalować plik libxslt za pośrednictwem pliku apk. Plik xsl i skrypt uruchamiania można przekazać za pośrednictwem protokołu FTP. Poniżej znajduje się przykładowy skrypt uruchamiania.

# 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

Poniższy przykładowy plik XSL dodaje nowy węzeł łącznika do 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>

Finalizowanie konfiguracji

Na koniec umieść sterowniki JAR w ścieżce klasy Tomcat i uruchom ponownie usługę App Service.

  1. Upewnij się, że pliki sterowników JDBC są dostępne dla klasyloader tomcat, umieszczając je w katalogu /home/site/lib . W usłudze Cloud Shell uruchom polecenie az webapp deploy --type=lib dla każdego sterownika JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Jeśli utworzono źródło danych na poziomie serwera, uruchom ponownie aplikację usługi App Service dla systemu Linux. Program Tomcat resetuje CATALINA_BASE i /home/tomcat używa zaktualizowanej konfiguracji.

Istnieją trzy podstawowe kroki podczas rejestrowania źródła danych za pomocą protokołu JBoss EAP: przekazywanie sterownika JDBC, dodawanie sterownika JDBC jako modułu i rejestrowanie modułu. Usługa App Service to bezstanowa usługa hostingu, więc polecenia konfiguracji do dodawania i rejestrowania modułu źródła danych muszą być skryptowe i stosowane podczas uruchamiania kontenera.

  1. Uzyskaj sterownik JDBC bazy danych.

  2. Utwórz plik definicji modułu XML dla sterownika JDBC. W poniższym przykładzie przedstawiono definicję modułu dla bazy danych 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. Umieść polecenia interfejsu wiersza polecenia JBoss w pliku o nazwie jboss-cli-commands.cli. Polecenia JBoss muszą dodać moduł i zarejestrować go jako źródło danych. W poniższym przykładzie przedstawiono polecenia interfejsu wiersza polecenia narzędzia JBoss dla bazy danych 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. Utwórz skrypt uruchamiania, startup_script.sh który wywołuje polecenia interfejsu wiersza polecenia JBoss. W poniższym przykładzie pokazano, jak wywołać element jboss-cli-commands.cli. Później skonfigurujesz usługę App Service tak, aby uruchamiała ten skrypt po uruchomieniu kontenera.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Korzystając z wybranego klienta FTP, przekaż sterownik JDBC, jboss-cli-commands.cli, startup_script.shi definicję modułu do ./site/deployments/tools/

  6. Skonfiguruj witrynę do uruchamiania startup_script.sh po uruchomieniu kontenera. W witrynie Azure Portal przejdź do pozycji Ogólne ustawienia>konfiguracji>Polecenie uruchamiania. Ustaw pole polecenia uruchamiania na /home/site/deployments/tools/startup_script.sh. Zapisz swoje zmiany.

Aby potwierdzić, że źródło danych zostało dodane do serwera JBoss, protokół SSH do aplikacji internetowej i uruchom polecenie $JBOSS_HOME/bin/jboss-cli.sh --connect. Po nawiązaniu połączenia z narzędziem JBoss uruchom polecenie /subsystem=datasources:read-resource , aby wyświetlić listę źródeł danych.

Następne kroki

Odwiedź centrum Azure for Java Developers, aby znaleźć przewodniki Szybki start platformy Azure, samouczki i dokumentację referencyjną języka Java.