Een Java-app voor Azure App Service configureren

Azure App Service kunnen Java-ontwikkelaars snel hun Java SE-, Tomcat- en JBoss EAP-webtoepassingen bouwen, implementeren en schalen in een volledig beheerde service. Toepassingen implementeren met Maven-invoegtoepassingen, vanaf de opdrachtregel of in editors zoals IntelliJ, Eclipse of Visual Studio Code.

Deze handleiding bevat belangrijke concepten en instructies voor Java-ontwikkelaars die App Service. Als u dit nog nooit Azure App Service, moet u eerst de Java-quickstart lezen. Algemene vragen over het gebruik App Service die niet specifiek zijn voor Java-ontwikkeling, worden beantwoord in de veelgestelde App Service .

Java-versie tonen

Als u de huidige Java-versie wilt zien, moet u de volgende opdracht uitvoeren in Cloud Shell:

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

Als u alle ondersteunde Java-versies wilt zien, moet u de volgende opdracht uitvoeren in Cloud Shell:

az webapp list-runtimes | grep java

Als u de huidige Java-versie wilt zien, moet u de volgende opdracht uitvoeren in Cloud Shell:

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

Als u alle ondersteunde Java-versies wilt zien, moet u de volgende opdracht uitvoeren in Cloud Shell:

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

Uw app implementeren

Hulpprogramma's bouwen

Maven

Met de Maven-invoegserver voor Azure Web Appskunt u uw Maven Java-project eenvoudig voorbereiden voor Azure Web App met één opdracht in de hoofdmap van uw project:

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

Met deze opdracht voegt u een invoegserver en gerelateerde configuratie toe door u te vragen azure-webapp-maven-plugin een bestaande Azure-web-app te selecteren of een nieuwe te maken. Implementeer vervolgens uw Java-app in Azure met de volgende opdracht:

mvn package azure-webapp:deploy

Hier is een voorbeeldconfiguratie in pom.xml :

<plugin> 
  <groupId>com.microsoft.azure</groupId>  
  <artifactId>azure-webapp-maven-plugin</artifactId>  
  <version>2.2.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. Stel de Gradle-invoeging voor Azure Web Apps door de invoeg-app toe te voegen aan uw build.gradle :

    plugins {
      id "com.microsoft.azure.azurewebapp" version "1.2.0"
    }
    
  2. Configureer de details van uw web-app. De bijbehorende Azure-resources worden gemaakt als deze niet bestaan. Hier is een voorbeeldconfiguratie. Raadpleeg dit document voor meer informatie.

    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. Implementeer met één opdracht.

    gradle azureWebAppDeploy
    

IDE's

Azure biedt naadloze Java App Service ontwikkelervaring in populaire Java IDE's, waaronder:

Kudu-API

Java SE

Als u .jar-bestanden wilt implementeren in Java SE, gebruikt u /api/publish/ het eindpunt van de Kudu-site. Zie deze documentatie voor meer informatie over deze API.

Notitie

Uw JAR-toepassing moet een naam hebben app.jar App Service om uw toepassing te identificeren en uit te voeren. De naam van uw toepassing wordt tijdens de implementatie automatisch gewijzigd in de Maven-invoegtoepassing (hierboven genoemd). Als u de naam van uw JAR niet wilt wijzigen in app.jar, kunt u een shellscript uploaden met de opdracht om uw JAR-app uit te voeren. Plak het absolute pad naar dit script in het tekstvak Opstartbestand in de sectie Configuratie van de portal. Het opstartscript kan niet worden uitgevoerd vanuit de map waarin deze is geplaatst. Gebruik daarom altijd absolute paden om te verwijzen naar bestanden in het opstartscript (bijvoorbeeld: java -jar /home/myapp/myapp.jar).

Tomcat

Als u .war-bestanden wilt implementeren in Tomcat, gebruikt u /api/wardeploy/ het eindpunt om uw archiefbestand te plaatsen. Zie deze documentatie voor meer informatie over deze API.

JBoss EAP

Als u .war-bestanden wilt implementeren in JBoss, gebruikt u /api/wardeploy/ het eindpunt om uw archiefbestand te plaatsen. Zie deze documentatie voor meer informatie over deze API.

Gebruik FTP om .ear-bestanden te implementeren. Uw .ear-toepassing wordt geïmplementeerd in de hoofdmap van de context die is gedefinieerd in de configuratie van uw toepassing. Als de hoofdmap van de context van uw app bijvoorbeeld is, kunt u door de <context-root>myapp</context-root> site bladeren op het /myapp pad: http://my-app-name.azurewebsites.net/myapp . Als u wilt dat uw web-app wordt gebruikt in het hoofdpad, moet u ervoor zorgen dat uw app de hoofdmap van de context in stelt op het hoofdpad: <context-root>/</context-root> . Zie Setting the context root of a web application (De contextmap van een webtoepassing instellen) voor meer informatie.

Implementeer uw .war of .jar niet met FTP. Het FTP-hulpprogramma is ontworpen om opstartscripts, afhankelijkheden of andere runtime-bestanden te uploaden. Het is niet de optimale keuze voor het implementeren van web-apps.

Apps voor logboekregistratie en -debuggen

Prestatierapporten, verkeersvisualisaties en statuscontrole zijn beschikbaar voor elke app via de Azure Portal. Zie overzicht van diagnostische Azure App Service voor meer informatie.

Diagnostische logboeken streamen

Als u toegang wilt tot de consolelogboeken die worden gegenereerd binnen uw toepassingscode in de App Service, schakelt u diagnostische logboekregistratie in door de volgende opdracht in de Cloud Shell uit te voeren:

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

Mogelijk waarden voor --level zijn: Error, Warning, Info en Verbose. Elk hoger niveau omvat het vorige niveau. Bijvoorbeeld: Error omvat alleen foutberichten en Verbose omvat alle berichten.

Nadat diagnostische logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:

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

Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.

Notitie

U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker.

U kunt op elk gewenst moment Ctrl+C typen om te stoppen met logboekstreaming.

U hebt vanuit de container toegang tot de consolelogboeken.

Schakel eerst logboekregistratie voor containers in door de volgende opdracht uit te voeren:

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

Vervang <app-name> en <resource-group-name> door de namen die van toepassing zijn op uw web-app.

Zodra logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:

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

Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.

U kunt op elk gewenst moment stoppen met logboekstreaming door Ctrl+C te typen.

U kunt ook de logboekbestanden in een browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Zie Stream-logboeken inCloud Shell.

Toegang tot SSH-console

Als u een directe SSH-sessie opent met uw container, moet uw app worden uitgevoerd.

Plak de volgende URL in uw browser en vervang <app-name> door de naam van uw app:

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

Als u nog niet bent geverifieerd moet u zich verifiëren met uw Azure-abonnement om verbinding te maken. Nadat u bent geverifieerd, ziet u een shell in de browser waarin u opdrachten binnen uw container kunt uitvoeren.

SSH-verbinding

Notitie

Wijzigingen die u buiten de map /home aanbrengt, worden in de container zelf opgeslagen en blijven niet behouden na het opnieuw opstarten van de app.

Als u een externe SSH-sessie wilt openen vanaf uw lokale machine, raadpleegt u SSH-sessie openen vanaf een externe shell.

Hulpprogramma's voor probleemoplossing

De ingebouwde Java-installatie afbeeldingen zijn gebaseerd op het Alpine Linux-besturingssysteem. Gebruik apk pakketbeheer om hulpprogramma's of opdrachten voor probleemoplossing te installeren.

Vluchtrecorder

Alle Java-runtimes op App Service van de Azul JVM's worden bij de Zulu Flight Recorder gebruikt. U kunt dit gebruiken om JVM-, systeem- en toepassingsgebeurtenissen vast te registreren en problemen in uw Java-toepassingen op te lossen.

Getijde opname

Als u een getijde opname wilt maken, hebt u de PID (proces-id) van de Java-toepassing nodig. Als u de PID wilt vinden, opent u een browser naar de SCM-site van uw web-app op https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/ . Op deze pagina worden de processen weergegeven die worden uitgevoerd in uw web-app. Zoek het proces met de naam 'java' in de tabel en kopieer de bijbehorende PID (proces-id).

Open vervolgens de Console Voor foutopsporing in de bovenste werkbalk van de SCM-site en voer de volgende opdracht uit. Vervang <pid> door de proces-id die u eerder hebt gekopieerd. Met deze opdracht start u een profiler-opname van 30 seconden van uw Java-toepassing en genereert u een bestand met de naam timed_recording_example.jfr in de D:\home map .

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

SSH in uw App Service en voer de opdracht uit om een lijst weer te geven met jcmd alle Java-processen die worden uitgevoerd. Naast jcmd zelf ziet u dat uw Java-toepassing wordt uitgevoerd met een proces-id-nummer (pid).

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

Voer de onderstaande opdracht uit om een opname van 30 seconden van de JVM te starten. Hiermee profileren we de JVM en maakt u een JFR-bestand met de naam jfr_example.jfr in de basismap. (Vervang 116 door de pid van uw Java-app.)

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

Tijdens het interval van 30 seconden kunt u controleren of de opname plaatsvindt door uit te jcmd 116 JFR.check gaan. Hiermee worden alle opnamen voor het opgegeven Java-proces weer gegeven.

Continue opname

U kunt Zulu Flight Recorder gebruiken om uw Java-toepassing continu te profileren met minimale gevolgen voor de runtimeprestaties. Voer de volgende Azure CLI-opdracht uit om een app-instelling met de naam JAVA_OPTS de benodigde configuratie te maken. De inhoud van de JAVA_OPTS app-instelling wordt doorgegeven aan de java opdracht wanneer uw app wordt gestart.

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

Zodra de opname is gestart, kunt u de huidige opnamegegevens op elk moment dumpen met behulp van de JFR.dump opdracht .

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

Bestanden .jfr analyseren

Gebruik FTPS om uw JFR-bestand naar uw lokale computer te downloaden. Als u het JFR-bestand wilt analyseren, downloadt en installeert u Zulu Mission Control. Zie de Azul-documentatie en de installatie-instructies voor instructies voor Zulu Mission Control.

App-logboekregistratie

Schakel logboekregistratie van toepassingen via de Azure Portal of Azure CLI in om App Service te configureren voor het schrijven van de standaard console-uitvoer van uw toepassing en standaard consolefoutstromen naar het lokale bestandssysteem of Azure Blob Storage. Logboekregistratie bij de lokale App Service bestandssysteem exemplaar is uitgeschakeld 12 uur nadat deze is geconfigureerd. Als u een langere retentie nodig hebt, configureert u de toepassing om uitvoer naar een Blob Storage-container te schrijven. De logboeken van uw Java- en Tomcat-app vindt u in de map /home/LogFiles/Application/.

Schakel logboekregistratie van toepassingen via de Azure Portal of Azure CLI in om App Service te configureren voor het schrijven van de standaard console-uitvoer van uw toepassing en standaard consolefoutstromen naar het lokale bestandssysteem of Azure Blob Storage. Als u een langere retentie nodig hebt, configureert u de toepassing om uitvoer naar een Blob Storage-container te schrijven. De logboeken van uw Java- en Tomcat-app vindt u in de map /home/LogFiles/Application/.

Azure Blob Storage logboekregistratie voor Linux-App Services kunnen alleen worden geconfigureerd met behulp van Azure Monitor

Als uw toepassing gebruikmaakt van Logback of Log4j voor tracering, kunt u deze traceringen doorsturen naar Azure-toepassing Insights met behulp van de configuratie-instructies voor het logboekregistratiekader in Explore Java trace logs in Application Insights.

Aanpassen en afstemmen

Azure App Service biedt ondersteuning voor out-of-the-box afstemming en aanpassing via Azure Portal cli. Lees de volgende artikelen voor niet-Java-specifieke web-app-configuratie:

Opties voor Java-runtime instellen

Als u toegewezen geheugen of andere opties voor JVM-runtime wilt instellen, maakt u een app-instelling met de JAVA_OPTS naam met de opties. App Service deze instelling door als een omgevingsvariabele aan de Java-runtime wanneer deze wordt gestart.

Maak in de Azure Portal onder Application Instellingen for the web app een nieuwe app-instelling met de naam voor Java SE of voor Tomcat die andere instellingen JAVA_OPTS bevat, zoals CATALINA_OPTS -Xms512m -Xmx1204m .

Als u de app-instelling wilt configureren vanuit de Maven-invoegvoegcode, voegt u instellings-/waardetags toe in de sectie Azure-invoegcode. In het volgende voorbeeld wordt een specifieke minimale en maximale Java-heapgrootte bepaald:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms512m -Xmx1204m</value>
    </property>
</appSettings>

Notitie

U hoeft geen web.config maken wanneer u Tomcat gebruikt op Windows App Service.

Ontwikkelaars die één toepassing uitvoeren met één implementatiesleuf in hun App Service kunnen de volgende opties gebruiken:

  • B1- en S1-instanties: -Xms1024m -Xmx1024m
  • B2- en S2-exemplaren: -Xms3072m -Xmx3072m
  • B3- en S3-exemplaren: -Xms6144m -Xmx6144m
  • P1v2-exemplaren: -Xms3072m -Xmx3072m
  • P2v2-exemplaren: -Xms6144m -Xmx6144m
  • P3v2-exemplaren: -Xms12800m -Xmx12800m
  • P1v3-exemplaren: -Xms6656m -Xmx6656m
  • P2v3-exemplaren: -Xms14848m -Xmx14848m
  • P3v3-exemplaren: -Xms30720m -Xmx30720m
  • I1-exemplaren: -Xms3072m -Xmx3072m
  • I2-exemplaren: -Xms6144m -Xmx6144m
  • I3-exemplaren: -Xms12800m -Xmx12800m
  • I1v2-exemplaren: -Xms6656m -Xmx6656m
  • I2v2-exemplaren: -Xms14848m -Xmx14848m
  • I3v2-exemplaren: -Xms30720m -Xmx30720m

Wanneer u de heap-instellingen van de toepassing afstemt, controleert u de details van uw App Service en houdt u rekening met meerdere toepassingen en implementatiesleuf om de optimale toewijzing van geheugen te vinden.

Websockockers in-

Schakel ondersteuning voor websockers in de Azure Portal in de toepassingsinstellingen voor de toepassing. U moet de toepassing opnieuw starten om de instelling van kracht te laten worden.

Schakel websockeondersteuning in met behulp van de Azure CLI met de volgende opdracht:

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

Start de toepassing vervolgens opnieuw:

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

Standaardtekencoderen instellen

Maak in Azure Portal toepassingstoepassing Instellingen voor de web-app een nieuwe app-instelling met de JAVA_OPTS naam met de waarde -Dfile.encoding=UTF-8 .

U kunt de app-instelling ook configureren met behulp van App Service Maven-invoegapp. Voeg de naam- en waardetags van de instelling toe in de configuratie van de invoegvoegcode:

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

JSP-bestanden vooraf compileren

Als u de prestaties van Tomcat-toepassingen wilt verbeteren, kunt u uw JSP-bestanden compileren voordat u implementeert in App Service. U kunt de Maven-invoeg-app van Apache Sling gebruiken of dit Ant-buildbestand gebruiken.

Toepassingen beveiligen

Java-toepassingen die worden uitgevoerd in App Service dezelfde set met best practices voor beveiliging als andere toepassingen.

Gebruikers verifiëren (Eenvoudige verificatie)

Stel app-verificatie in de Azure Portal met de optie Verificatie en autorisatie. Hier kunt u verificatie inschakelen met behulp Azure Active Directory of sociale aanmeldingen zoals Facebook, Google of GitHub. Azure Portal configuratie werkt alleen wanneer u één verificatieprovider configureert. Zie Configure your App Service app to use Azure Active Directory login (Uw app configureren voor het gebruik van Azure Active Directory-aanmelding) en de gerelateerde artikelen voor andere id-providers voor meer informatie. Als u meerdere aanmeldingsproviders wilt inschakelen, volgt u de instructies in het artikel Aanmeldingen en aanmeldingen aanpassen.

Java SE

Spring Boot-ontwikkelaars kunnen de Azure Active Directory Spring Boot gebruiken om toepassingen te beveiligen met behulp van bekende Spring Security-aantekeningen en API's. Zorg ervoor dat u de maximale headergrootte in het bestand application.properties verhoogt. We raden een waarde aan van 16384 .

Tomcat

Uw Tomcat-toepassing heeft rechtstreeks vanuit de servlet toegang tot de claims van de gebruiker door het Principal-object te casten naar een Map-object. Met het object Map wordt elk claimtype aan een verzameling claims voor dat type toe te voegen. In de onderstaande code request is een exemplaar van HttpServletRequest .

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

U kunt nu het Map object voor een specifieke claim inspecteren. Het volgende codefragment doormaakt bijvoorbeeld alle claimtypen en drukt de inhoud van elke verzameling af.

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);
            }
        }
    }

Als u gebruikers wilt uitloggen, gebruikt u het /.auth/ext/logout pad. Als u andere acties wilt uitvoeren, bekijkt u de documentatie over Aanmeldingen en aanmeldingen aanpassen. Er is ook officiële documentatie over de Tomcat HttpServletRequest-interface en de methoden ervan. De volgende servlet-methoden worden ook geseed op basis van uw App Service configuratie:

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

Als u deze functie wilt uitschakelen, maakt u een toepassingsinstelling met de WEBSITE_AUTH_SKIP_PRINCIPAL naam met de waarde 1 . Als u alle servlet-filters wilt uitschakelen die door App Service, maakt u een instelling met de naam WEBSITE_SKIP_FILTERS met de waarde 1 .

TLS/SSL configureren

Volg de instructies in Een aangepaste DNS-naam beveiligen met een TLS/SSL-binding in Azure App Service om een bestaand TLS/SSL-certificaat te uploaden en deze te binden aan de domeinnaam van uw toepassing. Standaard staat uw toepassing nog steeds HTTP-verbindingen toe. Volg de specifieke stappen in de zelfstudie om TLS/SSL af te dwingen.

KeyVault-verwijzingen gebruiken

Azure KeyVault biedt gecentraliseerd geheimbeheer met toegangsbeleid en controlegeschiedenis. U kunt geheimen (zoals wachtwoorden of verbindingsreeksen) opslaan in KeyVault en deze geheimen openen in uw toepassing via omgevingsvariabelen.

Volg eerst de instructies voor het verlenen van toegang tot Key Vault en het maken van een KeyVault-verwijzing naar uw geheim in een toepassingsinstelling. U kunt controleren of de verwijzing naar het geheim wordt opgelost door de omgevingsvariabele af te drukken terwijl u op afstand toegang hebt tot App Service terminal.

Als u deze geheimen wilt injecteren in uw Spring- of Tomcat-configuratiebestand, gebruikt u de syntaxis voor het injecteren van omgevingsvariabelen ( ${MY_ENV_VAR} ). Zie deze documentatie over externe configuraties voor Spring-configuratiebestanden.

Java Key Store gebruiken

Standaard worden openbare of persoonlijke certificaten die zijn geüpload naar App Service Linux, geladen in de respectieve Java-sleutelopslag wanneer de container wordt gestart. Nadat u het certificaat hebt geüpload, moet u de App Service opnieuw starten om het in het Java-sleutelopslag te laden. Openbare certificaten worden geladen in het sleutelopslag op $JAVA_HOME/jre/lib/security/cacerts en persoonlijke certificaten worden opgeslagen in $JAVA_HOME/lib/security/client.jks .

Mogelijk is er meer configuratie nodig voor het versleutelen van uw JDBC-verbinding met certificaten in het Java-sleutelopslag. Raadpleeg de documentatie voor het JDBC-stuurprogramma dat u hebt gekozen.

Het Java-sleutelopslag initialiseren

Als u het object wilt import java.security.KeyStore initialiseren, laadt u het keystore-bestand met het wachtwoord. Het standaardwachtwoord voor beide sleutelopslag is changeit .

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

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

Het sleutelopslag handmatig laden

U kunt certificaten handmatig laden in het sleutelopslag. Maak een app-instelling, , met de waarde om uit te App Service de certificaten automatisch in het SKIP_JAVA_KEYSTORE_LOAD 1 sleutelopslag te laden. Alle openbare certificaten die via de App Service zijn geüpload Azure Portal worden opgeslagen onder /var/ssl/certs/ . Persoonlijke certificaten worden opgeslagen onder /var/ssl/private/ .

U kunt communiceren met of fouten opsporen in het Java Key Tool door een SSH-verbinding met uw App Service en de opdracht uit te keytool voeren. Zie de documentatie over het sleutelhulpprogramma voor een lijst met opdrachten. Raadpleeg de officiële documentatie voor meer informatie over de KeyStore-API.

APM-platformen configureren

In deze sectie ziet u hoe u Java-toepassingen die op Azure App Service zijn geïmplementeerd, kunt verbinden met Azure Monitor Application Insights-, NewRelic- en AppDynamics APM-platforms (Application Performance Monitoring).

Application Insights configureren

Azure Monitor Application Insights is een cloudeigen toepassingsbewakingsservice waarmee klanten fouten, knelpunten en gebruikspatronen kunnen observeren om de prestaties van toepassingen te verbeteren en de gemiddelde oplossingstijd (MTTR) te verminderen. Met een paar klikken of CLI-opdrachten kunt u bewaking inschakelen voor uw Node.js- of Java-apps, automatisch verzamelen van logboeken, metrische gegevens en gedistribueerde traceringen, waardoor het niet nodig is om een SDK in uw app op te geven.

Azure Portal

Als u Application Insights wilt inschakelen vanuit de Azure Portal, gaat u naar Application Insights in het menu aan de linkerkant en selecteert u Application Insights. Standaard wordt een nieuwe Application Insights-resource met dezelfde naam als uw web-app gebruikt. U kunt ervoor kiezen om een bestaande Application Insights-resource te gebruiken of de naam te wijzigen. Klik onderaan op Toepassen

Azure CLI

Als u dit wilt inschakelen via de Azure CLI, moet u een Application Insights-resource maken en een aantal app-instellingen instellen op de Azure Portal om Application Insights te verbinden met uw web-app.

  1. De extensie Applications Insights inschakelen

    az extension add -n application-insights
    
  2. Maak een Application Insights resource met behulp van de onderstaande CLI-opdracht. Vervang de tijdelijke aanduidingen door de gewenste resourcenaam en -groep.

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

    Noteer de waarden connectionString voor en . U hebt deze waarden nodig in de volgende instrumentationKey stap.

    Voer uit om een lijst met andere locaties op te az account list-locations halen.

  1. Stel de instrumentatiesleutel, de connection string en de bewakingsagentversie in als app-instellingen in de web-app. Vervang <instrumentationKey> en door de waarden uit de vorige <connectionString> stap.

    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. Stel de instrumentatiesleutel, de connection string en de bewakingsagentversie in als app-instellingen in de web-app. Vervang <instrumentationKey> en door de waarden uit de vorige <connectionString> stap.

    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"
    

Een New Relic

  1. Maak een NewRelic-account op NewRelic.com

  2. Download de Java-agent van NewRelic. Deze heeft een bestandsnaam die vergelijkbaar is metnewrelic-java-x.x.x.zip.

  3. Kopieer uw licentiesleutel. U hebt deze later nodig om de agent te configureren.

  4. SSH in uw App Service en maak een nieuwe map /home/site/wwwroot/apm.

  5. Upload uitgepakte NewRelic Java-agentbestanden in een map onder /home/site/wwwroot/apm. De bestanden voor uw agent moeten zich in /home/site/wwwroot/apm/newrelic.

  6. Wijzig het YAML-bestand op /home/site/wwwroot/apm/newrelic/newrelic.yml en vervang de waarde van de tijdelijke aanduiding door uw eigen licentiesleutel.

  7. Blader in Azure Portal naar uw toepassing in App Service en maak een nieuwe toepassingsinstelling.

    • Maak voor Java SE-apps een omgevingsvariabele met de naam met de JAVA_OPTS waarde -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar .
    • Maak voor Tomcat een omgevingsvariabele met de CATALINA_OPTS naam met de waarde -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar .
  1. Maak een NewRelic-account op NewRelic.com

  2. Download de Java-agent van NewRelic. Deze heeft een bestandsnaam die vergelijkbaar is metnewrelic-java-x.x.x.zip.

  3. Kopieer uw licentiesleutel. U hebt deze later nodig om de agent te configureren.

  4. SSH in uw App Service en maak een nieuwe map /home/site/wwwroot/apm.

  5. Upload uitgepakte NewRelic Java-agentbestanden in een map onder /home/site/wwwroot/apm. De bestanden voor uw agent moeten zich in /home/site/wwwroot/apm/newrelic.

  6. Wijzig het YAML-bestand op /home/site/wwwroot/apm/newrelic/newrelic.yml en vervang de waarde van de tijdelijke aanduiding door uw eigen licentiesleutel.

  7. Blader in Azure Portal naar uw toepassing in App Service en maak een nieuwe toepassingsinstelling.

    • Maak voor Java SE-apps een omgevingsvariabele met de naam met de JAVA_OPTS waarde -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar .
    • Maak voor Tomcat een omgevingsvariabele met de CATALINA_OPTS naam met de waarde -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar .

Als u al een omgevingsvariabele voor of hebt, moet u de optie JAVA_OPTS toevoegen aan het einde van de huidige CATALINA_OPTS -javaagent:/... waarde.

AppDynamics configureren

  1. Een AppDynamics-account maken op AppDynamics.com

  2. Download de Java-agent van de AppDynamics-website. De bestandsnaam is vergelijkbaar met AppServerAgent-x.x.x.xxxxx.zip

  3. Gebruik de Kudu-console om een nieuwe map /home/site/wwwroot/apm te maken.

  4. Upload Java-agentbestanden in een map onder /home/site/wwwroot/apm. De bestanden voor uw agent moeten zich in /home/site/wwwroot/apm/appdynamics (

  5. Blader in Azure Portal naar uw toepassing in App Service en maak een nieuwe toepassingsinstelling.

    • Maak voor Java SE-apps een omgevingsvariabele met de naam met de waarde waar JAVA_OPTS uw App Service -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> <app-name> is.
    • Maak voor Tomcat-apps een omgevingsvariabele met de CATALINA_OPTS naam met de waarde waar uw App Service -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> <app-name> is.
  1. Een AppDynamics-account maken op AppDynamics.com

  2. Download de Java-agent van de AppDynamics-website. De bestandsnaam is vergelijkbaar met AppServerAgent-x.x.x.xxxxx.zip

  3. SSH in uw App Service en maak een nieuwe map /home/site/wwwroot/apm.

  4. Upload Java-agentbestanden in een map onder /home/site/wwwroot/apm. De bestanden voor uw agent moeten zich in /home/site/wwwroot/apm/appdynamics (

  5. Blader in Azure Portal naar uw toepassing in App Service en maak een nieuwe toepassingsinstelling.

    • Maak voor Java SE-apps een omgevingsvariabele met de naam met de waarde waar JAVA_OPTS uw App Service -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> <app-name> is.
    • Maak voor Tomcat-apps een omgevingsvariabele met de CATALINA_OPTS naam met de waarde waar uw App Service -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> <app-name> is.

Notitie

Als u al een omgevingsvariabele voor of hebt, moet u de optie JAVA_OPTS toevoegen aan het einde van de huidige CATALINA_OPTS -javaagent:/... waarde.

Gegevensbronnen configureren

Java SE

Als u verbinding wilt maken met gegevensbronnen in Spring Boot toepassingen, raden we u aan verbindingsreeksen te maken en deze in het bestand application.properties te injecteren.

  1. Stel in de sectie Configuratie van de pagina App Service een naam in voor de tekenreeks, plak uw JDBC-connection string in het waardeveld en stel het type in op Aangepast. U kunt deze instelling desgewenst instellen connection string sleufinstelling.

    Deze connection string is toegankelijk voor onze toepassing als een omgevingsvariabele met de naam CUSTOMCONNSTR_<your-string-name> . De naam die connection string hierboven is gemaakt, heeft bijvoorbeeld de naam CUSTOMCONNSTR_exampledb .

  2. In het bestand application.properties verwijst u naar connection string naam van de omgevingsvariabele. In ons voorbeeld gebruiken we het volgende.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Zie de Spring Boot over gegevenstoegang en externe configuraties voor meer informatie over dit onderwerp.

Tomcat

Deze instructies zijn van toepassing op alle databaseverbindingen. U moet tijdelijke aanduidingen invullen met de naam van de stuurprogrammaklasse en het JAR-bestand van uw gekozen database. Opgegeven is een tabel met klassenamen en stuurprogrammadownloads voor algemene databases.

Database Naam stuurprogrammaklasse JDBC-stuurprogramma
PostgreSQL org.postgresql.Driver Downloaden
MySQL com.mysql.jdbc.Driver Downloaden (selecteer 'Platform onafhankelijk')
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Downloaden

Als u Tomcat wilt configureren voor het gebruik van Java Database Connectivity (JDBC) of de Java Persistence API (JPA), moet u eerst de omgevingsvariabele aanpassen die bij het starten door CATALINA_OPTS Tomcat wordt ingelezen. Stel deze waarden in via een app-instelling in de App Service Maven-invoegvoeging:

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

Of stel de omgevingsvariabelen in op de pagina > Configuratietoepassing Instellingen in de Azure Portal.

Bepaal vervolgens of de gegevensbron beschikbaar moet zijn voor één toepassing of voor alle toepassingen die worden uitgevoerd op de Tomcat-servlet.

Gegevensbronnen op toepassingsniveau

  1. Maak een context.xml in de map META-INF/van uw project. Maak de map META-INF/als deze nog niet bestaat.

  2. Voeg context.xml een Context -element toe om de gegevensbron te koppelen aan een JNDI-adres. Vervang de tijdelijke aanduiding door de klassenaam van uw stuurprogramma driverClassName uit de bovenstaande tabel.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. Werk de gegevens van uw web.xml om de gegevensbron in uw toepassing te gebruiken.

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

Gedeelde resources op serverniveau

Tomcat-installaties op App Service op Windows bestaan in gedeelde ruimte op de App Service plan. U kunt een Tomcat-installatie niet rechtstreeks wijzigen voor configuratie voor de hele server. Als u configuratiewijzigingen op serverniveau wilt aanbrengen in uw Tomcat-installatie, moet u Tomcat kopiëren naar een lokale map, waarin u de configuratie van Tomcat kunt wijzigen.

Het maken van aangepaste Tomcat automatiseren bij het starten van de app

U kunt een opstartscript gebruiken om acties uit te voeren voordat een web-app wordt gestart. Het opstartscript voor het aanpassen van Tomcat moet de volgende stappen uitvoeren:

  1. Controleer of Tomcat al lokaal is gekopieerd en geconfigureerd. Als dat zo is, kan het opstartscript hier eindigen.
  2. Kopieer Tomcat lokaal.
  3. De vereiste configuratiewijzigingen aanbrengen.
  4. Geef aan dat de configuratie is voltooid.

Voor Windows sites maakt u een bestand met de startup.cmd naam of in de map startup.ps1 wwwroot . Dit wordt automatisch uitgevoerd voordat de Tomcat-server wordt gestart.

Hier is een PowerShell-script dat deze stappen voltooit:

    # 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 could not be 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
Transformaties

Een veelvoorkomende toepassing voor het aanpassen van een Tomcat-versie is het wijzigen van de server.xml context.xml configuratiebestanden , of web.xml Tomcat. App Service wijzigt deze bestanden al om platformfuncties te bieden. Als u deze functies wilt blijven gebruiken, is het belangrijk dat u de inhoud van deze bestanden behoudt wanneer u er wijzigingen in aan brengen. Hiervoor raden we u aan een XSL-transformatie (XSLT) te gebruiken. Gebruik een XSL-transformatie om wijzigingen aan te brengen in de XML-bestanden met behoud van de oorspronkelijke inhoud van het bestand.

Voorbeeld van XSLT-bestand

Met deze voorbeeldtransformator wordt een nieuw connector-knooppunt toegevoegd aan server.xml . Noteer identiteitstransformatie, waarmee de oorspronkelijke inhoud van het bestand behouden blijft.

    <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 is 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 is 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" 
                 keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
                 clientAuth="false" sslProtocol="TLS" />
    </xsl:template>

    </xsl:stylesheet>
Functie voor XSL-transformatie

PowerShell heeft ingebouwde hulpprogramma's voor het transformeren van XML-bestanden met behulp van XSL-transformaties. Het volgende script is een voorbeeldfunctie die u in kunt gebruiken om startup.ps1 de transformatie uit te voeren:

    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
    }
App-instellingen

Het platform moet ook weten waar uw aangepaste versie van Tomcat is geïnstalleerd. U kunt de locatie van de installatie instellen in de CATALINA_BASE app-instelling.

U kunt de Azure CLI gebruiken om deze instelling te wijzigen:

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

U kunt de instelling ook handmatig wijzigen in de Azure Portal:

  1. Ga naar Instellingen > Instellingen voor > configuratietoepassing.
  2. Selecteer Nieuwe app-instelling.
  3. Gebruik deze waarden om de instelling te maken:
    1. Naam:CATALINA_BASE
    2. Waarde: "%LOCAL_EXPANDED%\tomcat"
Voorbeeld startup.ps1

Met het volgende voorbeeldscript wordt een aangepaste Tomcat gekopieerd naar een lokale map, wordt een XSL-transformatie uitgevoerd en wordt aangegeven dat de transformatie is geslaagd:

    # 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 could not be 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
    }

Configuratie finaliseren

Ten slotte plaatsen we de stuurprogramma-JAR's in het Tomcat-klassepad en starten we uw App Service. Zorg ervoor dat de JDBC-stuurprogrammabestanden beschikbaar zijn voor de Tomcat-klasseloader door ze in de map /home/tomcat/lib te plaatsen. (Maak deze map als deze nog niet bestaat.) Voer de volgende stappen uit om deze App Service te uploaden naar uw App Service-exemplaar:

  1. Installeer in Cloud Shellde web-app-extensie:

    az extension add -–name webapp
    
  2. Voer de volgende CLI-opdracht uit om een SSH-tunnel te maken van uw lokale systeem naar App Service:

    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
  3. Verbinding maken naar de lokale tunnelpoort met uw SFTP-client en upload de bestanden naar de map /home/tomcat/lib.

U kunt ook een FTP-client gebruiken om het JDBC-stuurprogramma te uploaden. Volg deze instructies om uw FTP-referenties op te vragen.


Tomcat

Deze instructies zijn van toepassing op alle databaseverbindingen. U moet tijdelijke aanduidingen invullen met de naam van de stuurprogrammaklasse en het JAR-bestand van uw gekozen database. Opgegeven is een tabel met klassenamen en stuurprogrammadownloads voor algemene databases.

Database Naam stuurprogrammaklasse JDBC-stuurprogramma
PostgreSQL org.postgresql.Driver Downloaden
MySQL com.mysql.jdbc.Driver Downloaden (selecteer 'Platform onafhankelijk')
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Downloaden

Als u Tomcat wilt configureren voor het gebruik van Java Database Connectivity (JDBC) of de Java Persistence API (JPA), moet u eerst de omgevingsvariabele aanpassen die bij het starten door Tomcat wordt CATALINA_OPTS ingelezen. Stel deze waarden in via een app-instelling in de App Service Maven-invoegvoegapp:

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

Of stel de omgevingsvariabelen in op de Instellingen > configuratietoepassing in de Azure Portal.

Bepaal vervolgens of de gegevensbron beschikbaar moet zijn voor één toepassing of voor alle toepassingen die worden uitgevoerd op de Tomcat-servlet.

Gegevensbronnen op toepassingsniveau

  1. Maak een context.xml in de map META-INF/ van uw project. Maak de map META-INF/als deze nog niet bestaat.

  2. Voeg context.xml een Context -element toe om de gegevensbron te koppelen aan een JNDI-adres. Vervang de driverClassName tijdelijke aanduiding door de klassenaam van uw stuurprogramma uit de bovenstaande tabel.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. Werk de gegevens van uw web.xml om de gegevensbron in uw toepassing te gebruiken.

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

Gedeelde resources op serverniveau

Als u een gedeelde gegevensbron op serverniveau toevoegt, moet u de gegevensbron van Tomcat bewerken server.xml. Upload eerst een opstartscript en stel het pad naar het script in Configuratie > opstartopdracht in. U kunt het opstartscript uploaden met ftp.

Uw opstartscript maakt een xsl-transformatie naar het server.xml bestand en geeft het resulterende XML-bestand uit naar /usr/local/tomcat/conf/server.xml . Het opstartscript moet libxslt installeren via apk. Uw xsl-bestand en opstartscript kunnen worden geüpload via FTP. Hieronder vindt u een voorbeeld van een opstartscript.

# 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

Hieronder vindt u een voorbeeld van een xsl-bestand. In het xsl-voorbeeldbestand wordt een nieuw connector-knooppunt toegevoegd aan de 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 is 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 is 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" 
               keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

Configuratie finaliseren

Plaats ten slotte de stuurprogramma-JAR's in het Tomcat-klassepad en start de App Service.

  1. Zorg ervoor dat de JDBC-stuurprogrammabestanden beschikbaar zijn voor de Tomcat-klasseloader door ze in de map /home/tomcat/lib te plaatsen. (Maak deze map als deze nog niet bestaat.) Voer de volgende stappen uit om deze App Service te uploaden naar uw App Service-exemplaar:

    1. Installeer in Cloud Shellde web-app-extensie:
    az extension add -–name webapp
    
    1. Voer de volgende CLI-opdracht uit om een SSH-tunnel te maken van uw lokale systeem naar App Service:
    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
    1. Verbinding maken naar de lokale tunnelpoort met uw SFTP-client en upload de bestanden naar de map /home/tomcat/lib.

    U kunt ook een FTP-client gebruiken om het JDBC-stuurprogramma te uploaden. Volg deze instructies om uw FTP-referenties op te vragen.

  2. Als u een gegevensbron op serverniveau hebt gemaakt, start u de linux-App Service opnieuw. Tomcat wordt opnieuw CATALINA_BASE ingesteld op en gebruikt de /home/tomcat bijgewerkte configuratie.

JBoss EAP

Er zijn drie belangrijke stappen bij het registreren van een gegevensbron bij JBoss EAP:het uploaden van het JDBC-stuurprogramma, het toevoegen van het JDBC-stuurprogramma als module en het registreren van de module. App Service is een stateless hostingservice, dus de configuratieopdrachten voor het toevoegen en registreren van de gegevensbronmodule moeten als script worden uitgevoerd en toegepast zodra de container wordt gestart.

  1. Verkrijg het JDBC-stuurprogramma van uw database.

  2. Maak een XML-moduledefinitiebestand voor het JDBC-stuurprogramma. Het onderstaande voorbeeld is een moduledefinitie voor PostgreSQL.

    <?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. Plaats uw JBoss CLI-opdrachten in een bestand met de naam jboss-cli-commands.cli . De JBoss-opdrachten moeten de module toevoegen en registreren als een gegevensbron. In het onderstaande voorbeeld ziet u de JBoss CLI-opdrachten voor PostgreSQL.

    #!/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. Maak een opstartscript dat startup_script.sh de JBoss CLI-opdrachten aanroept. In het onderstaande voorbeeld ziet u hoe u uw jboss-cli-commands.cli aanroept. Later configureert u App Service dit script uit te voeren wanneer de container wordt gestart.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Upload met behulp van een FTP-client naar keuze uw JDBC-stuurprogramma, jboss-cli-commands.cli startup_script.sh , en de moduledefinitie naar /site/deployments/tools/ .

  6. Configureer uw site om te worden startup_script.sh uitgevoerd wanneer de container wordt gestart. Navigeer in Azure Portal naar Configuratie > Algemeen Instellingen > opstartopdracht. Stel het opstartopdrachtveld in op /home/site/deployments/tools/startup_script.sh . U moet vervolgens de wijzigingen Opslaan.

Als u wilt controleren of de gegevensbron is toegevoegd aan de JBoss-server, moet u SSH in uw web-app uitvoeren en $JBOSS_HOME/bin/jboss-cli.sh --connect uitvoeren. Zodra u bent verbonden met JBoss, voer de uit /subsystem=datasources:read-resource om een lijst met de gegevensbronnen af te drukken.

robots933456 in logboeken

U ziet mogelijk het volgende bericht in de containerlogboeken:

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

U kunt dit bericht veilig negeren. /robots933456.txt is een dummy-URL-pad dat App Service gebruikt om te controleren of de container aanvragen kan verwerken. Een 404-antwoord geeft alleen aan dat het pad niet bestaat, maar laat App Service wel weten dat de container in orde is en klaar is om te reageren op aanvragen.

Een Java Runtime-versie kiezen

App Service kunnen gebruikers de belangrijkste versie van de JVM kiezen, zoals Java 8 of Java 11, en de secundaire versie, zoals 1.8.0_232 of 11.0.5. U kunt er ook voor kiezen om de secundaire versie automatisch te laten worden bijgewerkt zodra er nieuwe secundaire versies beschikbaar komen. In de meeste gevallen moeten productiesites gebruikmaken van vastgemaakte secundaire JVM-versies. Hiermee voorkomt u onverwachte uitval tijdens het automatisch bijwerken van een secundaire versie. Alle Java-web-apps gebruiken 64-bits JVM's. Dit kan niet worden geconfigureerd.

Als u ervoor kiest om de secundaire versie vast te maken, moet u de secundaire JVM-versie periodiek bijwerken op de site. Om ervoor te zorgen dat uw toepassing wordt uitgevoerd op de nieuwere secundaire versie, maakt u een staging-site en verhoogt u de secundaire versie op de staging-site. Zodra u hebt bevestigd dat de toepassing correct wordt uitgevoerd in de nieuwe secundaire versie, kunt u de staging- en productiesleuven wisselen.

JBoss EAP-App Service plannen

JBoss EAP is alleen beschikbaar op de Premium v3 en Isolated v2 App Service plantypen. Klanten die tijdens de openbare preview een JBoss EAP-site op een andere laag hebben gemaakt, moeten omhoog schalen naar Premium- of Isolated-hardwarelaag om onverwacht gedrag te voorkomen.

Ondersteuningsverklaring voor Java-runtime

JDK-versies en -onderhoud

De ondersteunde Java Development Kit (JDK) van Azure wordt zulu geleverd via Azul Systems. Azul Zulu Enterprise-builds van OpenJDK zijn een gratis, voor meerdere platforms klaarstaande distributie van de OpenJDK voor Azure en Azure Stack wordt door Microsoft en Azul Systems. Ze bevatten alle onderdelen voor het maken en uitvoeren van Java SE-toepassingen. U kunt de JDK installeren vanuit Java JDK-installatie.

Belangrijke versie-updates worden geleverd via nieuwe runtimeopties in Azure App Service. Klanten werken bij naar deze nieuwere versies van Java door hun App Service te configureren en zijn verantwoordelijk voor het testen en ervoor zorgen dat de grote update aan hun behoeften voldoet.

Ondersteunde JDK's worden in januari, april, juli en oktober van elk jaar automatisch gepatcht op kwartaalbasis. Zie dit ondersteuningsdocument voor meer informatie over Java in Azure.

Beveiligingsupdates

Patches en oplossingen voor belangrijke beveiligingsproblemen worden uitgebracht zodra ze beschikbaar komen vanuit Azul Systems. Een 'major' beveiligingsprobleem wordt gedefinieerd door een basisscore van 9.0 of hoger op het NIST Common Vulnerability Scoring System, versie 2.

Tomcat 8.0 heeft het einde van de levensduur (EOL) bereikt vanaf 30 september 2018. Hoewel de runtime nog steeds beschikbaar is op Azure App Service, worden beveiligingsupdates niet toegepast op Tomcat 8.0. Migreert uw toepassingen indien mogelijk naar Tomcat 8.5 of 9.0. Tomcat 8.5 en 9.0 zijn beschikbaar op Azure App Service. Zie de officiële Tomcat-site voor meer informatie.

Afschaffing en pensioen

Als een ondersteunde Java-runtime wordt teruggetrokken, krijgen Azure-ontwikkelaars die de betrokken runtime gebruiken ten minste zes maanden voordat de runtime wordt teruggetrokken een kennisgeving over afschaffing.

Lokale ontwikkeling

Ontwikkelaars kunnen de productie-editie van Azul Zulu Enterprise JDK voor lokale ontwikkeling downloaden van de downloadsite van Azul.

Ondersteuning voor ontwikkeling

Productondersteuning voor de door Azure ondersteunde Azul Zulu JDK is beschikbaar via Microsoft bij het ontwikkelen voor Azure of Azure Stack met een ondersteuning voor Azure-abonnement.

Volgende stappen

Ga naar het Azure voor Java-ontwikkelaarscentrum voor azure-quickstarts, zelfstudies en Java-referentiedocumentatie.