Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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 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
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ąp symboldriverClassName
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>
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:
- 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(., '<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ść pliki JAR sterowników w ścieżce klas Tomcata i uruchom ponownie Twój App Service.
- 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:
- 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 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:
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_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 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
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.