Dela via


Migrera Spring Boot-program till Azure App Service

Den här guiden beskriver vad du bör känna till när du vill migrera ett befintligt Spring Boot-program till Azure App Service.

Före migrering

För att säkerställa en lyckad migrering slutför du de utvärderings- och inventeringssteg som beskrivs i följande avsnitt innan du börjar.

Växla till en plattform som stöds

App Service erbjuder specifika versioner av Java SE. För att säkerställa kompatibilitet migrerar du programmet till en av de versioner av den aktuella miljön som stöds innan du fortsätter med något av de återstående stegen. Var noga med att testa den resulterande konfigurationen fullt ut. Använd den senaste stabila versionen av Linux-distributionen i sådana tester.

Anmärkning

Den här verifieringen är särskilt viktig om den aktuella servern körs på en JDK som inte stöds (till exempel Oracle JDK eller IBM OpenJ9).

Du får den aktuella Java-versionen genom att logga in på din produktionsserver och köra följande kommando:

java -version

I Azure App Service tillhandahålls binärfilerna för Java 8 från Eclipse Temurin. För Java 11, 17 och alla framtida LTS-versioner av Java tillhandahåller App Service Microsoft Build of OpenJDK. Dessa binärfiler är tillgängliga för kostnadsfri nedladdning på följande webbplatser:

Inventera externa resurser

Identifiera externa resurser, till exempel datakällor, asynkrona JMS-meddelandetjänster och URL:er för andra tjänster. I Spring Boot-program kan du vanligtvis hitta konfigurationen för sådana resurser i mappen src/main/directory , i en fil som vanligtvis kallas application.properties eller application.yml. Kontrollera dessutom miljövariablerna för produktionsdistributionen för eventuella relevanta konfigurationsinställningar.

Databaser

För ett Spring Boot-program visas anslutningssträng vanligtvis i konfigurationsfiler när det är beroende av en extern databas. Här är ett exempel från en application.properties-fil:

spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Här är ett exempel från en application.properties-fil:

spring:
  data:
    mongodb:
      uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017

Mer möjliga konfigurationsscenarier finns i Spring Data-dokumentationen:

JMS-meddelandeköer

Identifiera den asynkronisering eller asynkronisering som används genom att titta i versionsmanifestet (vanligtvis en pom.xml - eller build.gradle-fil ) för relevanta beroenden.

Till exempel skulle ett Spring Boot-program som använder ActiveMQ vanligtvis innehålla det här beroendet i sin pom.xml-fil :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

Spring Boot-program som använder kommersiella asynkroniseringar innehåller vanligtvis beroenden direkt på koordinatorernas JMS-drivrutinsbibliotek. Här är ett exempel från en build.gradle-fil:

    dependencies {
      ...
      compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
      ...
    }

När du har identifierat den asynkrona meddelandekö eller de asynkrona koordinatorer som används hittar du motsvarande inställningar. I Spring Boot-program kan du vanligtvis hitta dem i application.properties och application.yml filer i programkatalogen.

Anmärkning

Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren, till exempel för databaser, cacheminnen, meddelanden eller AI-tjänster, kräver en mycket hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Använd endast det här flödet när säkrare alternativ, till exempel hanterade identiteter för lösenordslösa eller nyckellösa anslutningar, inte är genomförbara. För lokala datoråtgärder föredrar du användaridentiteter för lösenordslösa eller nyckellösa anslutningar.

Här är ett ActiveMQ-exempel från en application.properties-fil :

spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>

Mer information om ActiveMQ-konfiguration finns i dokumentationen om Spring Boot-meddelanden.

Här är ett IBM MQ-exempel från en application.yaml-fil :

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: <password>

Mer information om IBM MQ-konfiguration finns i dokumentationen för IBM MQ Spring-komponenter.

Identifiera externa cacheminnen

Identifiera eventuella externa cacheminnen som används. Redis används ofta via Spring Data Redis. Konfigurationsinformation finns i Spring Data Redis-dokumentationen.

Avgör om sessionsdata cachelagras via Spring Session genom att söka efter respektive konfiguration (i Java eller XML).

Identitetsprovidrar

Identifiera identitetsproviders som används av ditt program. Information om hur identitetsprovidrar kan konfigureras finns i följande:

  • Information om OAuth2-konfiguration finns i Spring Security-referensen.
  • För Auth0 Spring Security-konfiguration, se dokumentationen om Auth0 Spring Security.
  • Information om Konfiguration av PingFederate Spring Security finns i Auth0 PingFederate-instruktionerna.

Alla andra externa resurser

Det är inte möjligt att dokumentera alla möjliga externa beroenden i den här guiden. Det är ditt teams ansvar att kontrollera att alla externa beroenden för ditt program kan uppfyllas efter en App Service-migrering.

Inventera hemligheter

Lösenord och säkra strängar

Kontrollera alla egenskaper och konfigurationsfiler och alla miljövariabler för produktionsdistribution (er) för eventuella hemliga strängar och lösenord. I ett Spring Boot-program kommer sådana strängar sannolikt att hittas i application.properties eller application.yml.

Inventera certifikat

Dokumentera alla certifikat som används för offentliga SSL-slutpunkter eller kommunikation med serverdelsdatabaser och andra system. Du kan visa alla certifikat på produktionsservrarna genom att köra följande kommando:

keytool -list -v -keystore <path to keystore>

Kontrollera om och hur filsystemet används

All användning av programserverns filsystem kräver omkonfiguration eller, i sällsynta fall, arkitektoniska ändringar. Du kanske känner igen några eller alla av följande scenarier.

Skrivskyddat statiskt innehåll

Om ditt program för närvarande hanterar statiskt innehåll behöver du en alternativ plats för det. Du bör överväga att flytta statiskt innehåll till Azure Blob Storage och lägga till Azure Front Door för snabba nedladdningar globalt. Mer information finns i värd för statisk webbplats i Azure Storage och integrera ett Azure Storage-konto med Azure Front Door.

Specialfall

Vissa produktionsscenarier kan kräva ytterligare ändringar eller införa ytterligare begränsningar. Även om sådana scenarier kan vara ovanliga är det viktigt att se till att de antingen inte kan tillämpas på ditt program eller åtgärdas korrekt.

Avgör om programmet är beroende av schemalagda uppgifter

Schemalagda jobb, t. ex. Quartz Scheduler-uppgifter eller cron-jobb, kan inte användas med App Service. App Service hindrar dig inte från att distribuera ett program som innehåller schemalagda uppgifter internt. Om ditt program skalas ut kan dock samma schemalagda jobb köras mer än en gång per schemalagd period. Den här situationen kan leda till oönskade konsekvenser.

Inventera schemalagda jobb i eller utanför programprocessen.

Ta reda på om ditt program innehåller en operativsystemsspecifik kod

Om ditt program innehåller någon kod med beroenden på värdoperativsystemet måste du omstrukturera det för att ta bort dessa beroenden. Du kan till exempel behöva ersätta all användning av / eller \ i filsystemsökvägar med File.Separator eller Paths.get om programmet körs i Windows.

Identifiera alla externa processer/daemoner som körs på produktionsservern eller produktionsservrarna

Processer som körs utanför programservern, till exempel övervakningsdaemoner, måste migreras någon annanstans eller elimineras.

Identifiera hantering av icke-HTTP-begäranden eller flera portar

App Service stöder endast en enda HTTP-slutpunkt på en enda port. Om ditt program lyssnar på flera portar eller accepterar begäranden med andra protokoll än HTTP ska du inte använda Azure App Service.

Migration

Parameterisera konfigurationen

Kontrollera att alla externa resurskoordinater (till exempel databasanslutningssträngar) och andra anpassningsbara inställningar kan läsas från miljövariabler. Om du migrerar ett Spring Boot-program bör alla konfigurationsinställningar redan vara externalizable. Mer information finns i extern konfiguration i Spring Boot-dokumentationen.

Här är ett exempel som refererar till en SERVICEBUS_CONNECTION_STRING miljövariabel från en application.properties-fil :

spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000

Etablera en App Service-plan

I listan över tillgängliga tjänstplaner väljer du den plan vars specifikationer uppfyller eller överskrider kraven för den aktuella produktionsmaskinvaran.

Anmärkning

Om du planerar att köra mellanlagrings-/kontrollvärdesdistributioner eller använda distributionsfack måste App Service-planen innehålla denna ytterligare kapacitet. Vi rekommenderar att du använder en Premium-plan eller högre för Java-program.

Skapa App Service-planen.

Skapa och distribuera webbappar

Du måste skapa en webbapp i din App Service-plan (välja "Java SE" som körningsstack) för varje körbar JAR-fil som du tänker köra.

Maven-program

Om programmet har skapats från en Maven POM-fil, så skapa webbappen och distribuera ditt program genom att använda webbapps-plugin-programmet för Maven. Mer information finns i Snabbstart: Skapa en Java-app i Azure App Service.

Andra program än Maven-program

Om du inte kan använda Maven-plugin-programmet måste du etablera webbappen med andra medel, som exempelvis:

När webbappen har skapats kan du distribuera programmet genom att använda någon av de tillgängliga distributionsmetoderna. Om möjligt bör programmet laddas upp till /home/site/wwwroot/app.jar. Om du inte vill byta namn på jar-filen till app.jar kan du ladda upp ett gränssnittsskript med kommandot för att köra jar-filen. Klistra sedan in den fullständiga sökvägen till det här skriptet i textrutan Startfil i avsnittet Konfiguration i portalen. Startskriptet körs inte från den katalog som det placeras i. Använd därför alltid absoluta sökvägar för att referera till filer i startskriptet (till exempel: java -jar /home/myapp/myapp.jar).

Migrera JVM-körningsalternativen

Om ditt program kräver specifika körningsalternativ, så använd den lämpligaste metoden för att ange dem.

Aktivera anpassad domän SSL

Om programmet ska vara synligt i en anpassad domän måste du mappa ditt webbprogram till det. Mer information finns i Självstudie: Mappa ett befintligt anpassat DNS-namn till Azure App Service.

Sedan måste du binda SSL-certifikatet för den domänen till din App Service-webbapp. Mer information finns i Skydda ett anpassat DNS-namn med en SSL-bindning i Azure App Service.

Importera serverdelscertifikat

Alla certifikat för att kommunicera med serverdelssystem, t. ex. databaser, måste göras tillgängliga för App Service. Mer information finns i Lägga till ett SSL-certifikat i App Service.

Migrera externa resurskoordinater och andra inställningar

Följ de här stegen för att migrera anslutningssträngar och andra inställningar.

Anmärkning

För alla Spring Boot-programinställningar som parametriseras med variabler i avsnittet Parameterisera konfigurationen måste dessa miljövariabler definieras i programkonfigurationen. Alla Spring Boot-programinställningar som inte uttryckligen parametriseras med miljövariabler kan fortfarande åsidosättas av dem via Programkonfiguration. Till exempel:

spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000

App Service-programkonfiguration

Migrera schemalagda jobb

Om du vill köra schemalagda jobb på Azure bör du överväga att använda en Timer-utlösare för Azure Functions. Du behöver inte migrera själva jobbkoden till en funktion. Funktionen kan helt enkelt anropa en URL i ditt program för att utlösa jobbet. Om sådana jobb körningar måste anropas dynamiskt och/eller spåras centralt, bör du överväga att använda Spring Batch.

Du kan även skapa en logikapp med en upprepningsutlösare för att anropa URL:en utan att skriva någon kod utanför programmet. Mer information finns i Översikt – vad är Azure Logic Apps? och Skapa, Schemalägga och köra återkommande uppgifter och arbetsflöden med upprepningsutlösaren i Azure Logic Apps.

Anmärkning

För att förhindra skadlig användning måste du förmodligen se till att jobbanropets slutpunkt kräver autentiseringsuppgifter. I det här fallet måste utlösarfunktionen ange autentiseringsuppgifterna.

Migrera och aktivera identitetsprovidern

Om ditt program kräver autentisering eller auktorisering kontrollerar du att de är konfigurerade för åtkomst till identitetsprovidern med hjälp av följande vägledning:

  • Om identitetsprovidern är Microsoft Entra-ID bör inga ändringar behövas.
  • Om identitetsprovidern är en lokal Active Directory skog bör du överväga att implementera en hybrididentitetslösning med Microsoft Entra-ID. Mer information finns i dokumentationen om hybrididentiteter.
  • Om identitetsprovidern är en annan lokal lösning, till exempel PingFederate, läser du avsnittet Anpassad installation av Microsoft Entra Connect för att konfigurera federation med Microsoft Entra-ID. Du kan också överväga att använda Spring Security för att använda din identitetsprovider via OAuth2/OpenID Connect eller SAML.

Omstart- och röktest

Slutligen måste du starta om din webbapp, så att alla konfigurationsändringar tillämpas. När omstarten är klar kontrollerar du att programmet fungerar som det ska.

Eftermigration

Nu när du har migrerat ditt program till Azure App Service bör du kontrollera att det fungerar som förväntat. När du har gjort det har vi några rekommendationer för dig som kan göra ditt program mer molnbaserat.

Rekommendationer