Java-alkalmazás konfigurálása Azure-alkalmazás szolgáltatáshoz

Feljegyzés

Spring-alkalmazások esetén az Azure Spring Apps használatát javasoljuk. Azonban továbbra is használhatja a Azure-alkalmazás szolgáltatást célként. Tanácsért tekintse meg a Java számítási feladatok célhelyének útmutatását .

Azure-alkalmazás Szolgáltatással a Java-fejlesztők gyorsan készíthetnek, helyezhetnek üzembe és méretezhetnek Java-Standard kiadás, Tomcat és JBoss EAP-webalkalmazásokat egy teljes körűen felügyelt szolgáltatásban. Alkalmazások üzembe helyezése Maven beépülő modulokkal a parancssorból vagy olyan szerkesztőkben, mint az IntelliJ, az Eclipse vagy a Visual Studio Code.

Ez az útmutató az App Service-t használó Java-fejlesztők alapvető fogalmait és utasításait ismerteti. Ha még soha nem használta Azure-alkalmazás szolgáltatást, először olvassa el a Java rövid útmutatóját. A Java-fejlesztésre nem jellemző App Service használatával kapcsolatos általános kérdésekre az App Service gyakori kérdéseiben talál választ.

Java-verzió megjelenítése

Az aktuális Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:

az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"

Az összes támogatott Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:

az webapp list-runtimes --os windows | grep java

Az aktuális Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Az összes támogatott Java-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:

az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"

A verziótámogatásról további információt az App Service nyelvi futtatókörnyezet támogatási szabályzatában talál.

Az alkalmazás üzembe helyezése

Buildelési eszközök

Maven

Az Azure Web AppsHez készült Maven beépülő modullal egyszerűen előkészítheti a Maven Java-projektet az Azure Web Apphoz egy paranccsal a projekt gyökérkönyvtárában:

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config

Ez a parancs beépülő modult azure-webapp-maven-plugin és kapcsolódó konfigurációt ad hozzá, és megkéri, hogy válasszon ki egy meglévő Azure-webalkalmazást, vagy hozzon létre egy újat. Ezután a Következő paranccsal telepítheti a Java-alkalmazást az Azure-ban:

mvn package azure-webapp:deploy

Íme egy mintakonfiguráció a következőben pom.xml:

<plugin> 
  <groupId>com.microsoft.azure</groupId>  
  <artifactId>azure-webapp-maven-plugin</artifactId>  
  <version>2.11.0</version>  
  <configuration>
    <subscriptionId>111111-11111-11111-1111111</subscriptionId>
    <resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
    <appName>spring-boot-xxxxxxxxxx</appName>
    <pricingTier>B2</pricingTier>
    <region>westus</region>
    <runtime>
      <os>Linux</os>      
      <webContainer>Java SE</webContainer>
      <javaVersion>Java 11</javaVersion>
    </runtime>
    <deployment>
      <resources>
        <resource>
          <type>jar</type>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.jar</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin> 

Gradle

  1. Az Azure Web Apps Gradle beépülő moduljának beállításához adja hozzá a beépülő modult a következőhözbuild.gradle:

    plugins {
      id "com.microsoft.azure.azurewebapp" version "1.7.1"
    }
    
  2. Konfigurálja a webalkalmazás adatait. A megfelelő Azure-erőforrások akkor jönnek létre, ha nem léteznek. A részletekért tekintse meg ezt a dokumentumot egy mintakonfigurációban.

    azurewebapp {
        subscription = '<your subscription id>'
        resourceGroup = '<your resource group>'
        appName = '<your app name>'
        pricingTier = '<price tier like 'P1v2'>'
        region = '<region like 'westus'>'
        runtime {
          os = 'Linux'
          webContainer = 'Tomcat 9.0' // or 'Java SE' if you want to run an executable jar
          javaVersion = 'Java 8'
        }
        appSettings {
            <key> = <value>
        }
        auth {
            type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal
        }
    }
    
  3. Üzembe helyezés egyetlen paranccsal.

    gradle azureWebAppDeploy
    

Integrált fejlesztőkörnyezetek

Az Azure zökkenőmentes Java App Service-fejlesztési élményt nyújt a népszerű Java-azonosítókban, többek között a következőket:

Kudu API

Java SE

Ha .jar fájlokat szeretne üzembe helyezni a Java Standard kiadás, használja a /api/publish/ Kudu-webhely végpontját. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.

Feljegyzés

Az alkalmazás azonosításához és futtatásához a .jar alkalmazás nevét az App Service-nek kell neveznie app.jar . A Maven beépülő modul ezt automatikusan elvégzi Az üzembe helyezés során. Ha nem szeretné átnevezni a JAR-t app.jar, feltölthet egy rendszerhéjszkriptet a parancs használatával a .jar alkalmazás futtatásához. Illessze be a szkript abszolút elérési útját az Indítási fájl szövegmezőbe a portál Konfiguráció szakaszában. Az indítási szkript nem abból a könyvtárból fut, ahová az el lett helyezve. Ezért mindig abszolút elérési utakat használjon az indítási szkriptben található fájlokra való hivatkozáskor (például: java -jar /home/myapp/myapp.jar).

Tomcat

A .war-fájlok Tomcatben való üzembe helyezéséhez használja a /api/wardeploy/ végpontot az archív fájl POST-fájljának közzétételéhez. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.

JBoss EAP

A .war-fájlok JBoss-fájlban való üzembe helyezéséhez használja a végpontot az /api/wardeploy/ archív fájl postázásához. Az API-val kapcsolatos további információkért tekintse meg ezt a dokumentációt.

A .ear-fájlok telepítéséhez használja az FTP-t. A .ear-alkalmazás az alkalmazás konfigurációjában meghatározott környezetgyökérre van üzembe helyezve. Ha például az alkalmazás környezetgyökere, <context-root>myapp</context-root>akkor az elérési úton tallózhat a /myapp webhelyen: http://my-app-name.azurewebsites.net/myapp. Ha azt szeretné, hogy a webalkalmazás a gyökérútvonalon legyen kiszolgálva, győződjön meg arról, hogy az alkalmazás a gyökér elérési útjára állítja a környezet gyökerét: <context-root>/</context-root>. További információ: A webalkalmazás környezetgyökerének beállítása.

Ne helyezze üzembe a .war vagy .jar FTP használatával. Az FTP-eszköz indítási szkriptek, függőségek vagy más futtatókörnyezeti fájlok feltöltésére lett kialakítva. Nem ez az optimális választás a webalkalmazások üzembe helyezéséhez.

Alkalmazások naplózása és hibakeresése

A teljesítményjelentések, a forgalmi vizualizációk és az állapotellenőrzések minden alkalmazáshoz elérhetők az Azure Portalon keresztül. További információ: Azure-alkalmazás Szolgáltatásdiagnosztika áttekintése.

Diagnosztikai naplók streamelése

Az alkalmazáskódból létrehozott konzolnaplók App Service-ben történő eléréséhez kapcsolja be a diagnosztikai naplózást a következő parancs a Cloud Shellben történő futtatásával:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

A --level lehetséges értékei: Error, Warning, Info és Verbose. Minden szint tartalmazza az azt megelőző szintet. Például: az Error csak a hibaüzeneteket tartalmazza, a Verbose pedig az összes üzenetet.

Ha a diagnosztikai naplózás be van kapcsolva, futtassa a következő parancsot a naplóstream megtekintéséhez:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.

Feljegyzés

A naplófájlokat a böngészőből is megtekintheti a következő címen: https://<app-name>.scm.azurewebsites.net/api/logs/docker.

A Ctrl+C billentyűparanccsal bármikor leállíthatja a naplóstreamelést.

A tárolón belülről létrehozott konzolnaplókhoz hozzáférhet.

Először kapcsolja be a tárolónaplózást a következő parancs futtatásával:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Cserélje le és <resource-group-name> írja be <app-name> a webalkalmazásnak megfelelő neveket.

A tárolónaplózás bekapcsolása után futtassa a következő parancsot a naplóstream megtekintéséhez:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.

Ha bármikor le szeretné állítani a naplóstreamelést, írja be a Ctrl C billentyűkombinációt.+

A naplófájlokat a böngészőben is megvizsgálhatja a következő helyen https://<app-name>.scm.azurewebsites.net/api/logs/docker: .

További információ: Streamnaplók a Cloud Shellben.

SSH-konzol hozzáférése

Ahhoz, hogy közvetlen SSH-munkamenetet nyisson meg a tárolóval, az alkalmazásának futnia kell.

Illessze be a következő URL-címet a böngészőbe, és cserélje le az <app-name> kifejezést az alkalmazása nevére:

https://<app-name>.scm.azurewebsites.net/webssh/host

Ha még nem végezte el a hitelesítést, a csatlakozáshoz el kell végeznie a hitelesítést az Azure-előfizetésével. A hitelesítés után egy böngészőn belüli felület jelenik meg, ahol a tárolón belül futtathat parancsokat.

SSH-kapcsolat

Feljegyzés

A rendszer a /home könyvtáron kívül elvégzett módosításokat magában a tárolóban helyezi el, és ezek nem maradnak meg az alkalmazás újraindítása után.

Ha távoli SSH-munkamenetet szeretne megnyitni a helyi gépről, tekintse meg az SSH-munkamenet távoli rendszerhéjból történő megnyitásával foglalkozó témakört.

Hibaelhárítási eszközök

A beépített Java-rendszerképek az Alpine Linux operációs rendszeren alapulnak. A csomagkezelővel telepítheti a apk hibaelhárítási eszközöket vagy parancsokat.

Java Profiler

Az Azure-alkalmazás szolgáltatás összes Java-futtatókörnyezete a JDK Flight Recorder-et használja a Java-számítási feladatok profilozásához. Segítségével JVM-, rendszer- és alkalmazáseseményeket rögzíthet, és elháríthatja az alkalmazásokkal kapcsolatos problémákat.

A Java Profilerről további információt a Azure-alkalmazás Elemzések dokumentációjában talál.

Flight Recorder

Az App Service összes Java-futtatókörnyezete a Java Flight Recordert használja. Segítségével JVM-, rendszer- és alkalmazáseseményeket rögzíthet, és elháríthatja a Java-alkalmazások problémáit.

Időzított felvétel

Ha időtúllépést szeretne rögzíteni, szüksége lesz a Java-alkalmazás PID-jára (folyamatazonosítójára). A PID megkereséséhez nyisson meg egy böngészőt a webalkalmazás SCM-webhelyére a következő címen https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/: . Ezen a lapon a webalkalmazás futó folyamatai láthatók. Keresse meg a táblában a "java" nevű folyamatot, és másolja ki a megfelelő PID-t (folyamatazonosítót).

Ezután nyissa meg a Hibakeresési konzolt az SCM-webhely felső eszköztárán, és futtassa a következő parancsot. Cserélje le <pid> a korábban másolt folyamatazonosítóra. Ez a parancs elindítja a Java-alkalmazás 30 másodperces profilkészítő felvételét, és létrehoz egy, a C:\home címtárban elnevezett timed_recording_example.jfr fájlt.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"

SSH-t az App Service-be, és futtassa a parancsot az jcmd összes futó Java-folyamat listájának megtekintéséhez. A jcmd mellett látnia kell, hogy a Java-alkalmazás egy folyamatazonosító számmal (pid) fut.

078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar

Hajtsa végre a következő parancsot a JVM 30 másodperces felvételének elindításához. Profilt készít a JVM-ről, és létrehoz egy jfr_example.jfr nevű JFR-fájlt a kezdőkönyvtárban. (Cserélje le a 116-ot a Java-alkalmazás pidjára.)

jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"

A 30 másodperces időköz alatt ellenőrizheti, hogy a felvétel folyamatban jcmd 116 JFR.checkvan-e. A parancs az adott Java-folyamat összes felvételét megjeleníti.

Folyamatos rögzítés

A Java Flight Recorder használatával folyamatosan profilt készíthet a Java-alkalmazásról, minimális hatással a futtatókörnyezet teljesítményére. Ehhez futtassa a következő Azure CLI-parancsot egy JAVA_OPTS nevű alkalmazásbeállítás létrehozásához a szükséges konfigurációval. A JAVA_OPTS alkalmazásbeállítás tartalma a parancsnak java lesz átadva az alkalmazás indításakor.

az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d

A rögzítés megkezdése után a parancs használatával bármikor kiadhatja az aktuális rögzítési JFR.dump adatokat.

jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"

Fájlok elemzése .jfr

Az FTPS használatával töltse le a JFR-fájlt a helyi gépre. A JFR-fájl elemzéséhez töltse le és telepítse a Java Mission Controlt. A Java Mission Control-ra vonatkozó utasításokért tekintse meg a JMC dokumentációját és a telepítési utasításokat.

Alkalmazásnaplózás

Engedélyezze az alkalmazásnaplózást az Azure Portalon vagy az Azure CLI-ben , hogy konfigurálja az App Service-t az alkalmazás szabványos konzolkimenetének és standard konzolhibáinak a helyi fájlrendszerbe vagy az Azure Blob Storage-ba való írásához. A helyi App Service fájlrendszerpéldányra való naplózás a konfigurálás után 12 órával le van tiltva. Ha hosszabb megőrzésre van szüksége, konfigurálja az alkalmazást úgy, hogy a kimenetet egy Blob Storage-tárolóba írja. A Java- és Tomcat-alkalmazásnaplók a /home/LogFiles/Application/ könyvtárban találhatók.

Engedélyezze az alkalmazásnaplózást az Azure Portalon vagy az Azure CLI-ben , hogy konfigurálja az App Service-t az alkalmazás szabványos konzolkimenetének és standard konzolhibáinak a helyi fájlrendszerbe vagy az Azure Blob Storage-ba való írásához. Ha hosszabb megőrzésre van szüksége, konfigurálja az alkalmazást úgy, hogy a kimenetet egy Blob Storage-tárolóba írja. A Java- és Tomcat-alkalmazásnaplók a /home/LogFiles/Application/ könyvtárban találhatók.

Az Azure Blob Storage naplózása Linux-alapú alkalmazásokhoz csak az Azure Monitor használatával konfigurálható.

Ha az alkalmazás logbacket vagy Log4j-t használ nyomkövetéshez, ezeket a nyomkövetéseket továbbíthatja a Azure-alkalmazás Elemzések a naplózási keretrendszer konfigurációs utasításaival az Application Elemzések Java nyomkövetési naplóinak felfedezése című témakörben.

Feljegyzés

A CVE-2021-44228 ismert biztonsági rése miatt mindenképpen használja a Log4j 2.16-os vagy újabb verzióját.

Testreszabás és finomhangolás

Azure-alkalmazás szolgáltatás az Azure Portalon és a parancssori felületen keresztül támogatja a kívülről történő finomhangolást és testreszabást. Tekintse át a nem Java-specifikus webalkalmazás-konfigurációval kapcsolatos alábbi cikkeket:

Alkalmazástartalom helyi másolása

Állítsa be az alkalmazásbeállítást JAVA_COPY_ALL úgy, hogy true az alkalmazás tartalmát a megosztott fájlrendszerből másolja a helyi feldolgozóba. Ez a beállítás segít a fájlzárolási problémák megoldásában.

Java-futtatókörnyezet beállításainak megadása

A lefoglalt memória vagy más JVM-futtatókörnyezet beállításainak beállításához hozzon létre egy alkalmazásbeállítást a beállításokkal együttJAVA_OPTS. Az App Service környezeti változóként továbbítja ezt a beállítást a Java-futtatókörnyezetnek az indításkor.

Az Azure Portalon, a webalkalmazás Alkalmazás Gépház területén hozzon létre egy új, Java Standard kiadás vagy CATALINA_OPTS Tomcat nevű JAVA_OPTS alkalmazásbeállítást, amely más beállításokat is tartalmaz, például-Xms512m -Xmx1204m.

Ha az alkalmazásbeállítást a Maven beépülő modulból szeretné konfigurálni, adja hozzá a beállítási/értékcímkéket az Azure beépülő modul szakaszában. Az alábbi példa egy meghatározott minimális és maximális Java-halomméretet állít be:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms1024m -Xmx1024m</value>
    </property>
</appSettings>

Feljegyzés

A Tomcat Windows App Service-en való használatakor nem kell web.config fájlt létrehoznia.

Az App Service-csomagban egyetlen üzembehelyezési ponttal rendelkező alkalmazást futtató fejlesztők az alábbi lehetőségeket használhatják:

  • B1 és S1 példányok: -Xms1024m -Xmx1024m
  • B2 és S2 példányok: -Xms3072m -Xmx3072m
  • B3- és S3-példányok: -Xms6144m -Xmx6144m
  • P1v2-példányok: -Xms3072m -Xmx3072m
  • P2v2-példányok: -Xms6144m -Xmx6144m
  • P3v2-példányok: -Xms12800m -Xmx12800m
  • P1v3-példányok: -Xms6656m -Xmx6656m
  • P2v3-példányok: -Xms14848m -Xmx14848m
  • P3v3-példányok: -Xms30720m -Xmx30720m
  • I1-példányok: -Xms3072m -Xmx3072m
  • I2-példányok: -Xms6144m -Xmx6144m
  • I3-példányok: -Xms12800m -Xmx12800m
  • I1v2-példányok: -Xms6656m -Xmx6656m
  • I2v2-példányok: -Xms14848m -Xmx14848m
  • I3v2-példányok: -Xms30720m -Xmx30720m

Az alkalmazás halombeállításainak finomhangolásakor tekintse át az App Service-csomag részleteit, és vegye figyelembe, hogy több alkalmazásnak és üzembehelyezési pontnak kell megtalálnia a memória optimális lefoglalását.

Webes szoftvercsatornák bekapcsolása

Kapcsolja be a webes szoftvercsatornák támogatását az Azure Portalon az alkalmazás alkalmazásbeállításaiban . A beállítás érvénybe lépéséhez újra kell indítania az alkalmazást.

A webes szoftvercsatornák támogatásának bekapcsolása az Azure CLI-vel az alábbi paranccsal:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

Ezután indítsa újra az alkalmazást:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

Alapértelmezett karakterkódolás beállítása

Az Azure Portal alkalmazás Gépház területén hozzon létre egy új, értékekkel -Dfile.encoding=UTF-8ellátott JAVA_OPTS alkalmazásbeállítást.

Másik lehetőségként konfigurálhatja az alkalmazásbeállítást az App Service Maven beépülő modullal. Adja hozzá a beállításnevet és az értékcímkéket a beépülő modul konfigurációjában:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

JSP-fájlok fordítása előtti

A Tomcat-alkalmazások teljesítményének javítása érdekében az App Service-ben való üzembe helyezés előtt lefordíthatja a JSP-fájlokat. Használhatja az Apache Sling által biztosított Maven beépülő modult , vagy használhatja ezt az Ant buildfájlt.

Biztonságos alkalmazások

Az App Service-ben futó Java-alkalmazások biztonsági ajánlott eljárásai megegyeznek a többi alkalmazással.

Felhasználók hitelesítése (egyszerű hitelesítés)

Alkalmazáshitelesítés beállítása az Azure Portalon a Hitelesítés és engedélyezés beállítással. Innen engedélyezheti a hitelesítést Microsoft Entra-azonosítóval vagy olyan közösségi bejelentkezésekkel, mint a Facebook, a Google vagy a GitHub. Az Azure Portal konfigurációja csak egyetlen hitelesítési szolgáltató konfigurálásakor működik. További információ: Az App Service-alkalmazás konfigurálása a Microsoft Entra-bejelentkezés használatára, valamint a kapcsolódó cikkek más identitásszolgáltatók számára. Ha több bejelentkezési szolgáltatót is engedélyeznie kell, kövesse a bejelentkezések és kijelentkezések testreszabása című témakör utasításait.

Java SE

A Spring Boot fejlesztői a Microsoft Entra Spring Boot starter használatával biztonságossá tehetik az alkalmazásokat jól ismert Spring Security-széljegyzetek és API-k használatával. Ügyeljen arra, hogy növelje az application.properties fájl maximális fejlécméretét. Azt javasoljuk, hogy értéke 16384.

Tomcat

A Tomcat-alkalmazás közvetlenül a servletből érheti el a felhasználó jogcímeit, ha a Principal objektumot egy Térkép objektumra adhatja. Az Map objektum minden jogcímtípust az adott típusú jogcímek gyűjteményéhez rendel. Az alábbi példakód request egy példánya HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Most már bármilyen jogcímet megvizsgálhat az Map objektumban. A következő kódrészlet például végigfut az összes jogcímtípuson, és kinyomtatja az egyes gyűjtemények tartalmát.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

A felhasználók kijelentkezéséhez használja az /.auth/ext/logout elérési utat. Egyéb műveletek végrehajtásához tekintse meg a bejelentkezések és kijelentkezések testreszabásáról szóló dokumentációt. A Tomcat HttpServletRequest felületéről és módszereiről hivatalos dokumentáció is található. A következő servlet-metódusok is hidratálva vannak az App Service konfigurációja alapján:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

A funkció letiltásához hozzon létre egy olyan alkalmazásbeállítást WEBSITE_AUTH_SKIP_PRINCIPAL , amelynek értéke a 1. Ha le szeretné tiltani az App Service által hozzáadott összes servlet-szűrőt, hozzon létre egy értéket tartalmazó WEBSITE_SKIP_FILTERS1beállítást.

TLS/SSL konfigurálása

Meglévő TLS/SSL-tanúsítvány feltöltéséhez és az alkalmazás tartománynevére való kötéséhez kövesse az egyéni DNS-név biztonságossá tételét TLS/SSL-kötéssel a Azure-alkalmazás szolgáltatásban. Az alkalmazást a TLS/SSL kényszerítésére is konfigurálhatja.

KeyVault-hivatkozások használata

Az Azure KeyVault központi titkos kulcskezelést biztosít hozzáférési szabályzatokkal és naplózási előzményekkel. Titkos kulcsokat (például jelszavakat vagy kapcsolati sztring) tárolhat a KeyVaultban, és környezeti változókon keresztül hozzáférhet ezekhez a titkos kulcsokhoz az alkalmazásban.

Először kövesse azokat az utasításokat , amikor hozzáférést ad az alkalmazásnak egy kulcstartóhoz , és egy KeyVault-hivatkozást készít a titkos kulcsra egy alkalmazásbeállításban. Ellenőrizheti, hogy a hivatkozás feloldja-e a titkos kulcsot a környezeti változó nyomtatásával, miközben távolról hozzáfér az App Service terminálhoz.

Ha be szeretné szúrni ezeket a titkos kódokat a Spring vagy a Tomcat konfigurációs fájlba, használja a környezeti változóinjektálási szintaxist (${MY_ENV_VAR}). A Spring-konfigurációs fájlok esetében tekintse meg ezt a külső konfigurációkkal kapcsolatos dokumentációt.

A Java-kulcstároló használata

Alapértelmezés szerint az App Service Linuxra feltöltött nyilvános vagy magántanúsítványok a tároló elindulásakor betöltődnek a megfelelő Java-kulcstárolókba. A tanúsítvány feltöltése után újra kell indítania az App Service-t ahhoz, hogy betöltse a Java Key Store-ba. A nyilvános tanúsítványokat a rendszer betölti a kulcstárolóba a következő helyen $JRE_HOME/lib/security/cacerts: , és a magántanúsítványok tárolása a következő helyen $JRE_HOME/lib/security/client.jkstörténik:

További konfigurációra lehet szükség a JDBC-kapcsolat tanúsítványokkal való titkosításához a Java Key Store-ban. Tekintse meg a kiválasztott JDBC-illesztőprogram dokumentációját.

A Java-kulcstároló inicializálása

Az import java.security.KeyStore objektum inicializálásához töltse be a kulcstárfájlt a jelszóval. Mindkét kulcstároló alapértelmezett jelszava a következő changeit: .

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

A kulcstároló manuális betöltése

A tanúsítványokat manuálisan is betöltheti a kulcstárolóba. Hozzon létre egy alkalmazásbeállítást, amelynek az az értéke, SKIP_JAVA_KEYSTORE_LOADhogy az App Service automatikusan betöltse 1 a tanúsítványokat a kulcstárolóba. Az App Service-be az Azure Portalon keresztül feltöltött összes nyilvános tanúsítvány a következő helyen /var/ssl/certs/található: . A magántanúsítványok tárolása a következő helyen /var/ssl/private/történik: .

A Java-kulcseszközt úgy használhatja, hogy megnyit egy SSH-kapcsolatot az App Service-hez, és futtatja a parancsot keytool. A parancsok listáját a Kulcseszköz dokumentációjában találja. A KeyStore API-val kapcsolatos további információkért tekintse meg a hivatalos dokumentációt.

APM-platformok konfigurálása

Ez a szakasz bemutatja, hogyan csatlakoztathatók a Azure-alkalmazás szolgáltatásban üzembe helyezett Java-alkalmazások az Azure Monitor Alkalmazás Elemzések, a NewRelic és az AppDynamics alkalmazásteljesítmény-monitorozási (APM) platformjaihoz.

Az Application Insights konfigurálása

Az Azure Monitor Alkalmazás Elemzések egy natív felhőbeli alkalmazásmonitorozási szolgáltatás, amely lehetővé teszi az ügyfelek számára a hibák, szűk keresztmetszetek és használati minták megfigyelését az alkalmazás teljesítményének javítása és a feloldás középideje (MTTR) csökkentése érdekében. Néhány kattintással vagy parancssori felületi paranccsal engedélyezheti a figyelést a Node.js vagy Java-alkalmazások számára, automatikusancolhatja a naplókat, metrikákat és elosztott nyomkövetéseket, így nincs szükség az SDK alkalmazásba való belefoglalására. Az ügynök konfigurálásához elérhető alkalmazásbeállításokról az alkalmazás Elemzések dokumentációjában talál további információt.

Azure Portal

Ha engedélyezni szeretné az Alkalmazás Elemzések az Azure Portalon, nyissa meg az Alkalmazás Elemzések a bal oldali menüben, és válassza az Alkalmazás Elemzések bekapcsolása lehetőséget. Alapértelmezés szerint a rendszer a webalkalmazás nevével megegyező nevű új Application Insights-erőforrást használ. Választhat egy meglévő Application Insights-erőforrást, vagy módosíthatja a nevet. Válassza az Alkalmaz elemet az alján.

Azure CLI

Az Azure CLI-n keresztüli engedélyezéshez létre kell hoznia egy alkalmazás-Elemzések-erőforrást, és be kell állítania néhány alkalmazásbeállítást az Azure Portalon az Alkalmazás Elemzések webalkalmazáshoz való csatlakoztatásához.

  1. Az Alkalmazások Elemzések bővítmény engedélyezése

    az extension add -n application-insights
    
  2. Hozzon létre egy alkalmazás-Elemzések erőforrást a következő CLI-paranccsal. Cserélje le a helyőrzőket a kívánt erőforrásnévre és -csoportra.

    az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2  --kind web --application-type web
    

    Jegyezze fel az értékeket connectionString , és instrumentationKeya következő lépésben szüksége lesz ezekre az értékekre.

    A többi hely listájának lekéréséhez futtassa a következőt az account list-locations: .

  1. Állítsa be a rendszerállapotkulcsot, a kapcsolati sztring és a monitorozási ügynök verzióját alkalmazásbeállításokként a webalkalmazásban. Cserélje le és <connectionString> cserélje le <instrumentationKey> az előző lépés értékeit.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
    
  1. Állítsa be a rendszerállapotkulcsot, a kapcsolati sztring és a monitorozási ügynök verzióját alkalmazásbeállításokként a webalkalmazásban. Cserélje le és <connectionString> cserélje le <instrumentationKey> az előző lépés értékeit.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
    

Új relic konfigurálása

  1. NewRelic-fiók létrehozása a NewRelic.com

  2. Töltse le a Java-ügynököt a NewRelicből. A fájl neve hasonló a newrelic-java-x.x.x.zip.

  3. Másolja ki a licenckulcsot, és később konfigurálnia kell az ügynököt.

  4. SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.

  5. Töltse fel a kicsomagolt NewRelic Java-ügynökfájlokat a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/newrelic helyen kell lenniük.

  6. Módosítsa a YAML-fájlt a /home/site/wwwroot/apm/newrelic/newrelic.yml címen, és cserélje le a helyőrző licenc értékét a saját licenckulcsára.

  7. Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.

    • Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.JAVA_OPTS
    • A Tomcat esetében hozzon létre egy környezeti változót az értékkel-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.CATALINA_OPTS
  1. NewRelic-fiók létrehozása a NewRelic.com

  2. Töltse le a Java-ügynököt a NewRelicből. A fájl neve hasonló a newrelic-java-x.x.x.zip.

  3. Másolja ki a licenckulcsot, és később szüksége lesz rá az ügynök konfigurálásához.

  4. SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.

  5. Töltse fel a kicsomagolt NewRelic Java-ügynökfájlokat a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/newrelic helyen kell lenniük.

  6. Módosítsa a YAML-fájlt a /home/site/wwwroot/apm/newrelic/newrelic.yml címen, és cserélje le a helyőrző licenc értékét a saját licenckulcsára.

  7. Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.

    • Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változót az értékkel-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.JAVA_OPTS
    • A Tomcat esetében hozzon létre egy környezeti változót az értékkel-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.CATALINA_OPTS

Ha már rendelkezik környezeti változóval JAVA_OPTS az aktuális érték végéhez, fűzze CATALINA_OPTShozzá -javaagent:/... a beállítást.

Az AppDynamics konfigurálása

  1. AppDynamics-fiók létrehozása a AppDynamics.com

  2. Töltse le a Java-ügynököt az AppDynamics webhelyéről. A fájlnév hasonló a AppServerAgent-x.x.x.xxxxx.zip

  3. A Kudu-konzollal hozzon létre egy új könyvtárat /home/site/wwwroot/apm.

  4. Töltse fel a Java-ügynök fájljait a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/appdynamics helyen kell lenniük.

  5. Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.

    • Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változótJAVA_OPTS, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>, ahol <app-name> az App Service neve szerepel.
    • Tomcat-alkalmazások esetén hozzon létre egy környezeti változótCATALINA_OPTS, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>, ahol <app-name> az App Service neve szerepel.
  1. AppDynamics-fiók létrehozása a AppDynamics.com

  2. Töltse le a Java-ügynököt az AppDynamics webhelyéről. A fájlnév hasonló a AppServerAgent-x.x.x.xxxxx.zip

  3. SSH-t az App Service-példányba , és hozzon létre egy új könyvtárat /home/site/wwwroot/apm.

  4. Töltse fel a Java-ügynök fájljait a /home/site/wwwroot/apm könyvtárba. Az ügynök fájljainak a /home/site/wwwroot/apm/appdynamics helyen kell lenniük.

  5. Az Azure Portalon keresse meg az alkalmazást az App Service-ben, és hozzon létre egy új alkalmazásbeállítást.

    • Java-Standard kiadás-alkalmazások esetén hozzon létre egy környezeti változótJAVA_OPTS, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>, ahol <app-name> az App Service neve szerepel.
    • Tomcat-alkalmazások esetén hozzon létre egy környezeti változótCATALINA_OPTS, amelynek az az értéke-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>, ahol <app-name> az App Service neve szerepel.

Feljegyzés

Ha már rendelkezik környezeti változóval JAVA_OPTS az aktuális érték végéhez, fűzze CATALINA_OPTShozzá -javaagent:/... a beállítást.

Adatforrások konfigurálása

Java SE

A Spring Boot-alkalmazások adatforrásaihoz való csatlakozáshoz javasoljuk, hogy hozzon létre kapcsolati sztring, és injektálja őket az application.properties fájlba.

  1. Az App Service oldal "Konfiguráció" szakaszában adja meg a sztring nevét, illessze be a JDBC-kapcsolati sztring az értékmezőbe, és állítsa a típust "Egyéni" értékre. Ezt a kapcsolati sztring tetszés szerint pontbeállításként is beállíthatja.

    Ez a kapcsolati sztring az alkalmazás számára elérhető egy környezeti változó névenCUSTOMCONNSTR_<your-string-name>. Például: CUSTOMCONNSTR_exampledb.

  2. Az application.properties fájlban hivatkozzon erre a kapcsolati sztring a környezeti változó nevével. Példánkban az alábbiakat használnánk.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

További információ: Spring Boot-dokumentáció az adathozzáférésről és a külső konfigurációkról.

Tomcat

Ezek az utasítások az összes adatbázis-kapcsolatra vonatkoznak. A helyőrzőket ki kell töltenie a kiválasztott adatbázis illesztőprogram-osztálynevével és JAR-fájljával. A megadott táblázat osztályneveket és illesztőprogram-letöltéseket tartalmaz a gyakori adatbázisokhoz.

Adatbázis Illesztőprogram-osztály neve JDBC-illesztő
PostgreSQL org.postgresql.Driver Letöltés
MySQL com.mysql.jdbc.Driver Letöltés (Válassza a "Platformfüggetlen" lehetőséget)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Letöltés

Ahhoz, hogy a Tomcat a Java Database Csatlakozás ivity (JDBC) vagy a Java Persistence API (JPA) használatára legyen konfigurálva, először szabja testre a CATALINA_OPTS Tomcat által az indításkor beolvasott környezeti változót. Ezeket az értékeket az App Service Maven beépülő modul alkalmazásbeállításával állíthatja be:

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

Vagy állítsa be a környezeti változókat az Azure Portal Konfigurációs>alkalmazás Gépház lapján.

Ezután állapítsa meg, hogy az adatforrásnak elérhetőnek kell-e lennie egy alkalmazásnak vagy a Tomcat servleten futó összes alkalmazásnak.

Alkalmazásszintű adatforrások

  1. Hozzon létre egy context.xml fájlt a projekt META-INF/könyvtárában. Hozza létre a META-INF/ könyvtárat, ha nem létezik.

  2. A context.xml adjon hozzá egy Context elemet az adatforrás JNDI-címhez való csatolásához. Cserélje le a driverClassName helyőrzőt az illesztőprogram osztálynevére a fenti táblázatból.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Frissítse az alkalmazás web.xml az adatforrás használatára az alkalmazásban.

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

Megosztott kiszolgálószintű erőforrások

A Windows app service-en futó Tomcat-telepítések az App Service-csomag megosztott területén találhatók. Kiszolgálószintű konfigurációhoz nem módosíthatja közvetlenül a Tomcat-telepítést. Ha kiszolgálószintű konfigurációt szeretne módosítani a Tomcat-telepítésen, át kell másolnia a Tomcatet egy helyi mappába, amelyben módosíthatja a Tomcat konfigurációját.

Egyéni Tomcat létrehozásának automatizálása az alkalmazás indításakor

Egy webalkalmazás indítása előtt indítószkripttel műveleteket hajthat végre. A Tomcat testreszabásához szükséges indítási szkriptnek a következő lépéseket kell végrehajtania:

  1. Ellenőrizze, hogy a Tomcat már ki lett-e másolva, és helyileg lett-e konfigurálva. Ha így volt, az indítási szkript itt véget érhet.
  2. Másolja helyileg a Tomcatet.
  3. Végezze el a szükséges konfigurációs módosításokat.
  4. Jelezze, hogy a konfiguráció sikeresen befejeződött.

Windows-alkalmazások esetén hozzon létre egy fájlt nevesített startup.cmd vagy startup.ps1 a wwwroot címtárban. Ez a fájl automatikusan fut, mielőtt a Tomcat-kiszolgáló elindul.

Íme egy PowerShell-szkript, amely az alábbi lépéseket hajtja végre:

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
    }

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    {... customization ...}

    # Mark that the operation was a success
    New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
Átalakítások

A Tomcat-verziók testreszabásának gyakori használati esete a server.xmlcontext.xmlTomcat konfigurációs web.xml fájljainak módosítása. Az App Service már módosítja ezeket a fájlokat, hogy platformfunkciókat biztosítson. A funkciók további használatához fontos, hogy a módosítások végrehajtásakor megőrizze ezeknek a fájloknak a tartalmát. Ehhez javasoljuk, hogy XSL-átalakítást (XSLT) használjon. XSL-átalakítás használatával módosíthatja az XML-fájlokat, miközben megőrzi a fájl eredeti tartalmát.

Példa XSLT-fájlra

Ez a példaátalakítás új összekötőcsomópontot ad hozzá.server.xml Figyelje meg az identitásátalakítást, amely megőrzi a fájl eredeti tartalmát.

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
    <!-- Ensure that your transform files include this block -->
    <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>
Függvény XSL-átalakításhoz

A PowerShell beépített eszközökkel rendelkezik az XML-fájlok XSL-átalakításokkal történő átalakításához. Az alábbi szkript egy példafüggvény, amely az startup.ps1 átalakítás végrehajtásához használható:

    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);

        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Write-Host  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }
Alkalmazásbeállítások

A platformnak azt is tudnia kell, hogy hol van telepítve a Tomcat egyéni verziója. A telepítés helyét az CATALINA_BASE alkalmazásbeállításban állíthatja be.

Az Azure CLI használatával módosíthatja ezt a beállítást:

    az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"

Vagy manuálisan is módosíthatja a beállítást az Azure Portalon:

  1. Nyissa meg a Gépház> Configuration>alkalmazás beállításait.
  2. Válassza az Új alkalmazásbeállítás lehetőséget.
  3. A beállítás létrehozásához használja az alábbi értékeket:
    1. Név: CATALINA_BASE
    2. Érték: "%LOCAL_EXPANDED%\tomcat"
Példa startup.ps1

Az alábbi példaszkript egy egyéni Tomcat-fájlt másol egy helyi mappába, XSL-átalakítást hajt végre, és azt jelzi, hogy az átalakítás sikeres volt:

    # Locations of xml and xsl files
    $target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
    $target_xsl="$Env:HOME\site\server.xsl"

    # Define the transform function
    # Useful if transforming multiple files
    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);
        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            echo  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }

    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
    }

    md -Path "$Env:LOCAL_EXPANDED\tomcat"

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Mark that the operation was a success if successful
    if($success){
        New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
    }

Konfiguráció véglegesítése

Végül helyezze az illesztőprogram JARs-eit a Tomcat osztályútvonalra, és indítsa újra az App Service-t. Győződjön meg arról, hogy a JDBC-illesztőfájlok elérhetők a Tomcat-osztálybetöltő számára, ha a /home/site/lib könyvtárba helyezi őket. A Cloud Shellben futtassa az webapp deploy --type=lib az egyes illesztőprogramok JAR-jét:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar

Tomcat

Ezek az utasítások az összes adatbázis-kapcsolatra vonatkoznak. A helyőrzőket ki kell töltenie a kiválasztott adatbázis illesztőprogram-osztálynevével és JAR-fájljával. A megadott táblázat osztályneveket és illesztőprogram-letöltéseket tartalmaz a gyakori adatbázisokhoz.

Adatbázis Illesztőprogram-osztály neve JDBC-illesztő
PostgreSQL org.postgresql.Driver Letöltés
MySQL com.mysql.jdbc.Driver Letöltés (Válassza a "Platformfüggetlen" lehetőséget)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Letöltés

Ahhoz, hogy a Tomcat a Java Database Csatlakozás ivity (JDBC) vagy a Java Persistence API (JPA) használatára legyen konfigurálva, először szabja testre a CATALINA_OPTS Tomcat által az indításkor beolvasott környezeti változót. Ezeket az értékeket az App Service Maven beépülő modul alkalmazásbeállításával állíthatja be:

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

Vagy állítsa be a környezeti változókat az Azure Portal Konfigurációs>alkalmazás Gépház lapján.

Ezután állapítsa meg, hogy az adatforrásnak elérhetőnek kell-e lennie egy alkalmazásnak vagy a Tomcat servleten futó összes alkalmazásnak.

Alkalmazásszintű adatforrások

  1. Hozzon létre egy context.xml fájlt a projekt META-INF/könyvtárában. Hozza létre a META-INF/ könyvtárat, ha nem létezik.

  2. A context.xml adjon hozzá egy Context elemet az adatforrás JNDI-címhez való csatolásához. Cserélje le a driverClassName helyőrzőt az illesztőprogram osztálynevére a fenti táblázatból.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Frissítse az alkalmazás web.xml az adatforrás használatára az alkalmazásban.

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

Megosztott kiszolgálószintű erőforrások

Megosztott, kiszolgálószintű adatforrás hozzáadásához szerkesztenie kell a Tomcat server.xml. Először töltsön fel egy indítási szkriptet, és állítsa be a szkript elérési útját a Configuration>Startup Commandben. Az indítási szkriptet FTP-vel töltheti fel.

Az indítási szkript xsl-átalakítást készít a server.xml fájlra, és az eredményként kapott XML-fájlt a következőre /usr/local/tomcat/conf/server.xmlalakítja. Az indítási szkriptnek telepítenie kell a libxsltet az APK-on keresztül. Az xsl-fájl és az indítási szkript FTP-vel tölthető fel. Az alábbiakban egy példa indítási szkript látható.

# 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

Az alábbi példa XSL-fájl egy új összekötő csomópontot ad hozzá a Tomcat server.xml.

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

Konfiguráció véglegesítése

Végül helyezze az illesztőprogram JARs-eit a Tomcat osztályútvonalra, és indítsa újra az App Service-t.

  1. Győződjön meg arról, hogy a JDBC-illesztőfájlok elérhetők a Tomcat-osztálybetöltő számára, ha a /home/site/lib könyvtárba helyezi őket. A Cloud Shellben futtassa az webapp deploy --type=lib az egyes illesztőprogramok JAR-jét:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Ha kiszolgálószintű adatforrást hozott létre, indítsa újra az App Service Linux-alkalmazást. A Tomcat visszaállítja CATALINA_BASE a /home/tomcat frissített konfigurációt, és használja azt.

JBoss EAP-adatforrások

Az adatforrás JBoss EAP-val való regisztrálása három alapvető lépésből áll: a JDBC-illesztőprogram feltöltése, a JDBC-illesztőprogram modulként való hozzáadása és a modul regisztrálása. Az App Service állapot nélküli üzemeltetési szolgáltatás, ezért az adatforrásmodul hozzáadására és regisztrálására szolgáló konfigurációs parancsokat a tároló indításakor szkripttel kell használni és alkalmazni.

  1. Szerezze be az adatbázis JDBC-illesztőprogramját.

  2. Hozzon létre egy XML-moduldefiníciós fájlt a JDBC-illesztőhöz. Az alábbi példa a PostgreSQL moduldefinícióját mutatja be.

    <?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. Helyezze a JBoss CLI-parancsokat egy nevű jboss-cli-commands.clifájlba. A JBoss-parancsoknak hozzá kell adniuk a modult, és regisztrálniuk kell adatforrásként. Az alábbi példa a PostgreSQL JBoss CLI-parancsait mutatja be.

    #!/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. Hozzon létre egy indítási szkriptet, startup_script.sh amely meghívja a JBoss CLI-parancsokat. Az alábbi példa bemutatja, hogyan hívhatja meg a sajátját jboss-cli-commands.cli. Később konfigurálja az App Service-t a szkript futtatására a tároló indításakor.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Egy tetszőleges FTP-ügyfél használatával töltse fel a JDBC-illesztőt és jboss-cli-commands.clistartup_script.sha moduldefiníciót a következőre/site/deployments/tools/: .

  6. Konfigurálja a webhelyet úgy, hogy a tároló indításakor fusson startup_script.sh . Az Azure Portalon keresse meg a Configuration>General Gépház> Startup parancsot. Állítsa be az indítási parancsmezőt a következőre /home/site/deployments/tools/startup_script.sh: . Mentse a módosításokat.

Annak ellenőrzéséhez, hogy az adatforrás hozzá lett-e adva a JBoss-kiszolgálóhoz, az SSH-t a webalkalmazásba, és futtassa $JBOSS_HOME/bin/jboss-cli.sh --connect. Miután csatlakozott a JBoss-hoz, futtassa a /subsystem=datasources:read-resource elemet az adatforrások listájának nyomtatásához.

robots933456 a naplókban

A következő üzenet jelenhet meg a tárolónaplókban:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Az üzenet biztonságosan figyelmen kívül hagyható. /robots933456.txt egy olyan próba URL-cím, amelyet az App Service annak a vizsgálatára használ, hogy a tároló képes-e a kérések kiszolgálására. A 404-es válasz egyszerűen azt jelenti, hogy a cím nem létezik, azonban jelzi az App Service számára, hogy a tároló kifogástalan állapotú, és készen áll a kérések megválaszolására.

Java-futtatókörnyezeti verzió kiválasztása

Az App Service-ben a felhasználók kiválaszthatják a JVM főverzióját, például a Java 8-at vagy a Java 11-et, valamint a javítás verzióját, például az 1.8.0_232-es vagy a 11.0.5-ös verziót. Dönthet úgy is, hogy az új alverziók elérhetővé válásával automatikusan frissíti a javításverziót. A legtöbb esetben az éles alkalmazásoknak rögzített javítás JVM-verziókat kell használniuk. Ez megakadályozza a nem várt kimaradást a javítások automatikus frissítések során. Minden Java-webalkalmazás 64 bites JVM-eket használ, és nem konfigurálható.

Ha Tomcat-et használ, dönthet úgy, hogy rögzíti a Tomcat javításverzióját. Windows rendszeren a JVM és a Tomcat javításverzióit egymástól függetlenül rögzítheti. Linuxon rögzítheti a Tomcat javításverzióját; A JVM javításverziója is rögzítve van, de külön nem konfigurálható.

Ha úgy dönt, hogy rögzíti az alverziót, rendszeresen frissítenie kell a JVM alverzióját az alkalmazásban. Annak érdekében, hogy az alkalmazás az újabb alverzión fusson, hozzon létre egy átmeneti pontot, és növelje az alverziót az előkészítési ponton. Ha meggyőződik arról, hogy az alkalmazás megfelelően fut az új alverzión, felcserélheti az előkészítési és éles pontokat.

JBoss EAP

Fürtözés a JBoss EAP-ban

Az App Service támogatja a fürtözést a JBoss EAP 7.4.1-s és újabb verzióihoz. A fürtözés engedélyezéséhez a webalkalmazásnak integrálva kell lennie egy virtuális hálózattal. Amikor a webalkalmazás integrálva van egy virtuális hálózattal, újraindul, és a JBoss EAP telepítése automatikusan fürtözött konfigurációval indul el. A JBoss EAP-példányok a virtuális hálózati integrációban megadott alhálózaton keresztül kommunikálnak a környezeti változóban WEBSITES_PRIVATE_PORTS futásidőben megjelenített portokkal. A fürtözés letiltásához hozzon létre egy tetszőleges értékkel elnevezett WEBSITE_DISABLE_CLUSTERING alkalmazásbeállítást.

Feljegyzés

Ha arm-sablonnal engedélyezi a virtuális hálózat integrációját, manuálisan kell beállítania a tulajdonság vnetPrivatePorts értékét 2. Ha engedélyezi a virtuális hálózati integrációt a parancssori felületről vagy a portálról, ez a tulajdonság automatikusan be van állítva.

Ha engedélyezve van a fürtözés, a JBoss EAP-példányok a FILE_PING JGroups felderítési protokollt használják az új példányok felderítéséhez, és megőrzik a fürt adatait, például a fürt tagjait, azonosítóikat és IP-címeiket. Az App Service-ben ezek a fájlok a következő alatt /home/clusterinfo/találhatók: . Az első EAP-példány olvasási/írási engedélyeket szerez be a fürt tagsági fájlján. Más példányok beolvassák a fájlt, megkeresik az elsődleges csomópontot, és egyeztetnek a fürtbe felvenni kívánt csomóponttal, és hozzáadják a fájlhoz.

A Prémium V3 és az izolált V2 App Service-csomagtípusok opcionálisan eloszthatók a rendelkezésre állási zónák között, így javítva az üzleti szempontból kritikus fontosságú számítási feladatok rugalmasságát és megbízhatóságát. Ezt az architektúrát zónaredundanciának is nevezik. A JBoss EAP-fürtszolgáltatás kompatibilis a zónaredundancia funkcióval.

Automatikus méretezési szabályok

Ha automatikus méretezési szabályokat konfigurál a horizontális skálázáshoz, fontos, hogy a példányokat növekményesen (egyenként) távolítsa el, hogy az egyes eltávolított példányok átadhassák a tevékenységeit (például egy adatbázis-tranzakció kezelését) a fürt egy másik tagjára. Ha az automatikus méretezési szabályokat a Portálon úgy konfigurálja, hogy leskálázható legyen, használja az alábbi beállításokat:

  • Művelet: "Darabszám csökkentése"
  • Lehűlés: "5 perc" vagy nagyobb
  • Példányszám: 1

Nem kell növekményesen hozzáadnia példányokat (horizontális felskálázás), egyszerre több példányt is hozzáadhat a fürthöz.

JBoss EAP App Service-csomagok

A JBoss EAP csak a Premium v3 és az Izolált v2 App Service-csomag típusok esetében érhető el. A váratlan viselkedés elkerülése érdekében azoknak az ügyfeleknek, akik egy másik szinten hoztak létre JBoss EAP-webhelyet a nyilvános előzetes verzióban, prémium vagy izolált hardverszintre kell skálázniuk.

Tomcat alapkonfiguráció az App Servicesben

A Java-fejlesztők megbízhatóan testre szabhatják a kiszolgáló beállításait, elháríthatják a problémákat, és magabiztosan helyezhetnek üzembe alkalmazásokat a Tomcatben, ha ismerik a Tomcat server.xml fájl- és konfigurációs adatait. A lehetséges testreszabások a következők:

  • A Tomcat konfigurációjának testreszabása: A server.xml fájl és a Tomcat konfigurációs adatainak megismerésével finomhangolhatja a kiszolgáló beállításait az alkalmazások igényeinek megfelelően.
  • Hibakeresés: Ha egy alkalmazás telepítve van egy Tomcat-kiszolgálón, a fejlesztőknek ismernie kell a kiszolgáló konfigurációját az esetleges problémák hibakereséséhez. Ez magában foglalja a kiszolgálónaplók ellenőrzését, a konfigurációs fájlok vizsgálatát és az esetlegesen előforduló hibák azonosítását.
  • A Tomcat hibáinak elhárítása: A Java-fejlesztők elkerülhetetlenül problémákat tapasztalnak a Tomcat-kiszolgálójukkal, például teljesítményproblémákkal vagy konfigurációs hibákkal. A server.xml fájl és a Tomcat konfigurációs adatainak megismerésével a fejlesztők gyorsan diagnosztizálhatják és elháríthatják ezeket a problémákat, ami időt és energiát takaríthat meg.
  • Alkalmazások üzembe helyezése a Tomcatben: Ha Java-webalkalmazást szeretne üzembe helyezni a Tomcatben, a fejlesztőknek tudniuk kell, hogyan konfigurálják a server.xml fájlt és más Tomcat-beállításokat. Ezeknek a részleteknek a megértése elengedhetetlen az alkalmazások sikeres üzembe helyezéséhez és annak biztosításához, hogy zökkenőmentesen futnak a kiszolgálón.

Ha egy beépített Tomcattel rendelkező alkalmazást hoz létre a Java-számítási feladatok (war- vagy JAR-fájlok) üzemeltetéséhez, bizonyos beállításokat ki kell vennie a Tomcat-konfiguráció keretéből. Részletes információkért tekintse meg az Apache Tomcat hivatalos dokumentációját , beleértve a Tomcat Web Server alapértelmezett konfigurációját is.

Emellett vannak bizonyos átalakítások is, amelyek a Tomcat-eloszlás server.xml felül vannak alkalmazva a kezdéskor. Ezek a Csatlakozás or, a Gazdagép és a Szelep beállításaira való átalakítások.

Vegye figyelembe, hogy a Tomcat legújabb verziói server.xml (8.5.58-at és 9.0.38-at) használnak. A Tomcat régebbi verziói nem használnak átalakításokat, és ennek következtében eltérő viselkedésük lehet.

Összekötő

<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
  • maxHttpHeaderSize a következőre van állítva: 16384
  • URIEncoding a következőre van állítva: UTF-8
  • conectionTimeout értékre WEBSITE_TOMCAT_CONNECTION_TIMEOUTvan állítva, amely alapértelmezés szerint a következő: 240000
  • maxThreads értékre WEBSITE_CATALINA_MAXTHREADSvan állítva, amely alapértelmezés szerint a következő: 200
  • maxConnections értékre WEBSITE_CATALINA_MAXCONNECTIONSvan állítva, amely alapértelmezés szerint a következő: 10000

Feljegyzés

A connectionTimeout, a maxThreads és a max Csatlakozás ions beállítások alkalmazásbeállításokkal hangolhatók

Az alábbiakban példa cli-parancsokat láthat, amelyekkel módosíthatja a conectionTimeout, a maxThreads vagy a max Csatlakozás ions értékét:

az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
  • Csatlakozás or a tároló címét használja a 127.0.0.1 helyett

Gazdagép

<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
  • appBase értékre AZURE_SITE_APP_BASEvan állítva, amely alapértelmezés szerint helyi WebappsLocalPath
  • xmlBase értékre AZURE_SITE_HOMEvan állítva, amely alapértelmezés szerint a következő: /site/wwwroot
  • unpackWARs értékre AZURE_UNPACK_WARSvan állítva, amely alapértelmezés szerint a következő: true
  • workDir az alapértelmezett értékre JAVA_TMP_DIRvan állítva TMP
  • errorReportValveClass egyéni hibajelentési szelepet használ

Szelep

<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t &quot;%r&quot; %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
  • directory értékre AZURE_LOGGING_DIRvan állítva, amely alapértelmezés szerint a következő: home\logFiles
  • maxDaysWEBSITE_HTTPLOGGING_RETENTION_DAYSaz , amely alapértelmezés szerint 0 [forever]

Linuxon ugyanazzal a testreszabással rendelkezik, plusz:

  • Hiba- és jelentéskészítési oldalakat ad hozzá a szelephez:
               <xsl:attribute name="appServiceErrorPage">
                   <xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
               </xsl:attribute>

               <xsl:attribute name="showReport">
                   <xsl:value-of select="'${catalina.valves.showReport}'"/>
               </xsl:attribute>

               <xsl:attribute name="showServerInfo">
                   <xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
               </xsl:attribute>

Következő lépések

Látogasson el az Azure for Java Fejlesztői központba az Azure rövid útmutatóihoz, oktatóanyagaihoz és Java-referenciadokumentációihoz.