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 Bezpłatna, Premium v3 i Izolowana wersja 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.
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ładCUSTOMCONNSTR_exampledb
.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 odpowiednią udostępnioną bazę danych do /usr/local/tomcat/conf/context.xml przy użyciu 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
Utwórz plik context.xml w katalogu META-INF/ projektu. Utwórz katalog META-INF/, jeśli nie istnieje.
W context.xml dodaj
Context
element, aby połączyć źródło danych z adresem JNDI. ZastąpdriverClassName
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>
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:
- 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(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<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>
</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.
- 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.
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ć kompleksowe scenariusze korzystające z tego podejścia, zobacz Samouczek: tworzenie aplikacji internetowej JBoss przy użyciu usługi aplikacja systemu Azure Service w systemach Linux i MySQL.
Podczas rejestrowania źródła danych za pomocą protokołu JBoss EAP należy wykonać trzy podstawowe kroki:
- Przekaż sterownik JDBC.
- Dodaj sterownik JDBC jako moduł.
- 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 skry skrypucie uruchamiania i uruchomić go za każdym razem, gdy zostanie uruchomiony kontener JBoss. Używanie baz danych PostgreSQL, MySQL i SQL Database jako przykładów:
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 JBoss służące do tworzenia źródła danych PostgreSQL o nazwie
java:jboss/datasources/postgresDS
JNDI .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_USERNAME
iDB_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.Utwórz skrypt uruchamiania, startup.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/scripts/jboss_cli_commands.cli
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 java:jboss/datasources/postgresDS
JNDI .
Następne kroki
Odwiedź centrum Azure for Java Developers, aby znaleźć przewodniki Szybki start platformy Azure, samouczki i dokumentację referencyjną języka Java.