Udostępnij za pomocą


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.

Azure App Service uruchamia aplikacje internetowe Java w pełni zarządzanej usłudze w trzech wariantach:

  • Java Standard Edition (SE): może uruchomić aplikację wdrożoną jako pakiet Java Archive (JAR), który zawiera serwer osadzony (taki jak Spring Boot, Quarkus, Dropwizard lub aplikacja z osadzonym serwerem Tomcat lub Jetty).
  • Tomcat: Wbudowany serwer Tomcat może uruchamiać aplikację wdrożona jako pakiet archiwum aplikacji internetowej (WAR).
  • JBoss Enterprise Application Platform (EAP): wbudowany serwer JBoss EAP może uruchomić aplikację wdrożona jako pakiet WAR lub Enterprise Archive (EAR). Obsługiwane dla aplikacji systemu Linux w zestawie poziomów cenowych, w tym Free, Premium v3 i Isolated v2.gti

Uwaga / Notatka

Aplikacja JBoss EAP w usłudze App Service obsługuje teraz rozliczenia "Bring Your Own License" (BYOL), dzięki czemu klienci z istniejącymi subskrypcjami oprogramowania Red Hat mogą stosować te licencje bezpośrednio do wdrożeń protokołu EAP JBoss w usłudze Azure App Service. Dowiedz się więcej.

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

Kontenery Tomcat systemu Linux mogą automatycznie konfigurować udostępnione źródła danych na serwerze Tomcat, ustawiając zmienną środowiskową WEBSITE_AUTOCONFIGURE_DATABASE na wartość true. 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 odpowiednią udostępnioną bazę danych do /usr/local/tomcat/conf/context.xml przy użyciu odpowiedniego sterownika dostępnego w kontenerze. Aby uzyskać kompleksowy scenariusz korzystający z tego podejścia, zobacz Samouczek: tworzenie aplikacji internetowej Tomcat przy użyciu usługi Azure App Service na 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 oraz sterowniki do pobrania dla typowych baz danych.

baza danych Nazwa klasy sterownika Sterownik 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

Aby skonfigurować źródło 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 symbol driverClassName nazwą klasy sterownika z tabeli powyżej.

    <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

Napiwek

Kontenery Tomcat systemu Linux mogą automatycznie stosować pliki XSLT przy użyciu następującej konwencji dla plików kopiowanych do /home/site/wwwroot: jeśli server.xml.xsl lub server.xml.xslt są obecne, zostaną one zastosowane do Tomcat server.xml. Jeśli context.xml.xsl lub context.xml.xslt są obecne, zostaną zastosowane do serwera Tomcat context.xml.

Dodanie udostępnionego źródła danych na poziomie serwera wymaga edytowania elementu server.xml Tomcat. Ponieważ zmiany plików spoza /home katalogu są efemeryczne, zmiany w plikach konfiguracji serwera Tomcat muszą być stosowane programowo w następujący sposób:

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

Skrypt uruchamiania stosuje transformację XSL na pliku server.xml i zapisuje wynikowy plik XML do /usr/local/tomcat/conf/server.xml. Skrypt uruchamiania powinien zainstalować libxslt lub xlstproc w zależności od dystrybucji wersji Tomcat aplikacji internetowej. Plik XSL i skrypt uruchamiania można przekazać za pośrednictwem protokołu FTP. Poniżej znajduje się przykładowy skrypt uruchamiania.

# Install the libxslt package on Alpine-based images:
apk add --update libxslt

# Install the xsltproc package on Debian or Ubuntu-based images:
apt install xsltproc

# Also copy the transform file to /home/tomcat/conf/
# 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 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>

Finalizowanie konfiguracji

Na koniec umieść pliki JAR sterowników w ścieżce klas Tomcata i uruchom ponownie Twój App Service.

  1. Upewnij się, że pliki sterowników JDBC są dostępne dla classloadera 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 do /home/tomcat i używa zaktualizowanej konfiguracji.

Napiwek

Domyślnie kontenery JBoss systemu Linux mogą automatycznie konfigurować udostępnione źródła danych na serwerze JBoss. Jedyną rzeczą, którą należy wykonać, jest dodanie ustawienia aplikacji zawierającego prawidłowe parametry połączenia JDBC do bazy danych Oracle, SQL Server, PostgreSQL lub MySQL (w tym poświadczeń połączenia) i dodania zmiennej WEBSITE_AUTOCONFIGURE_DATABASE Ustawienia aplikacji / Środowiska z wartością true. Obsługiwane są również połączenia JDBC utworzone za pomocą łącznika usługi. Usługa App Service automatycznie dodaje odpowiednie udostępnione źródło danych (na podstawie nazwy ustawienia aplikacji i sufiksu _DS), używając odpowiedniego sterownika dostępnego w kontenerze. Aby uzyskać kompleksowy scenariusz korzystający z tego podejścia, zobacz Samouczek: Budowanie aplikacji internetowej JBoss przy użyciu Azure App Service na systemie Linux i MySQL.

Podczas rejestrowania źródła danych za pomocą protokołu JBoss EAP należy wykonać trzy podstawowe kroki:

  1. Przekaż sterownik JDBC.
  2. Dodaj sterownik JDBC jako moduł.
  3. Dodaj źródło danych za pomocą modułu .

Usługa App Service to bezstanowa usługa hostingu, dlatego należy umieścić te kroki w skrypcie uruchamiania i uruchomić go każdorazowo, gdy uruchamia się kontener JBoss. Używanie baz danych PostgreSQL, MySQL i SQL Database jako przykładów:

Uwaga / Notatka

Aplikacja JBoss EAP w usłudze App Service obsługuje teraz rozliczenia "Bring Your Own License" (BYOL), dzięki czemu klienci z istniejącymi subskrypcjami oprogramowania Red Hat mogą stosować te licencje bezpośrednio do wdrożeń protokołu EAP JBoss w usłudze Azure App Service. Dowiedz się więcej.

  1. Umieść polecenia JBoss CLI 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 JBoss CLI do tworzenia źródła danych PostgreSQL z nazwą JNDI java:jboss/datasources/postgresDS.

    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
    

    Należy pamiętać, że module add polecenie używa trzech zmiennych środowiskowych (DB_HOST, DB_USERNAMEi DB_PASSWORD), które należy dodać w usłudze App Service jako ustawienia aplikacji. Skrypt dodaje je bez --resolve-parameter-values flagi, aby program JBoss nie zapisywał swoich wartości w postaci zwykłego tekstu.

  2. Utwórz skrypt startowy, startup.sh, który wywołuje polecenia CLI 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/scripts/jboss_cli_commands.cli
    
  3. Korzystając z wybranej opcji wdrożenia, przekaż sterownik JDBC, jboss-cli-commands.cli i startup.sh do ścieżek określonych w odpowiednich skryptach. W szczególności przekaż startup.sh jako plik startowy. Na przykład:

    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
    

    Aby uzyskać więcej informacji, zobacz Wdrażanie plików w usłudze App Service.

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.

Zgodnie z definicją w pliku jboss-cli-commands.cli, można uzyskać dostęp do połączenia PostgreSQL przy użyciu nazwy JNDI java:jboss/datasources/postgresDS.

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