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.

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

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 w systemie Linux mogą automatycznie konfigurować współdzielone ź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 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

  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

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

  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 wykonuje transformację XSL na pliku server.xml i zapisuje wynikowy plik XML do . 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 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. Jedyne, co należy zrobić, to 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), a usługa App Service automatycznie dodaje odpowiednie udostępnione źródło danych przy użyciu 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:

  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.

Następne kroki

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