Självstudie: Skapa en Tomcat-webbapp med Azure App Service på Linux och MySQL
Den här självstudien visar hur du skapar, konfigurerar och distribuerar ett säkert Tomcat-program i Azure App Service som ansluter till en MySQL-databas (med Hjälp av Azure Database for MySQL). Azure App Service är en mycket skalbar webbvärdtjänst med självkorrigering som enkelt kan distribuera appar i Windows eller Linux. När du är klar har du en Tomcat-app som körs på Azure App Service på Linux.
I den här självstudien lär du dig att:
- Skapa en säker arkitektur som standard för Azure App Service och Azure Cosmos DB med MongoDB API.
- Skydda anslutningshemligheter med hjälp av en hanterad identitet och Key Vault-referenser.
- Distribuera en Tomcat-exempelapp till App Service från en GitHub-lagringsplats.
- Ansluter App Service-appinställningar i programkoden.
- Gör uppdateringar och distribuera om programkoden.
- Strömma diagnostikloggar från App Service.
- Hantera appen i Azure Portal.
- Etablera samma arkitektur och distribuera med hjälp av Azure Developer CLI.
- Optimera ditt utvecklingsarbetsflöde med GitHub Codespaces och GitHub Copilot.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
- Ett GitHub-konto. du kan också få en gratis.
- Kunskaper om Java med Tomcat-utveckling.
- (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
- Azure Developer CLI installerat. Du kan följa stegen med Azure Cloud Shell eftersom Azure Developer CLI redan är installerat.
- Kunskaper om Java med Tomcat-utveckling.
- (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
Hoppa till slutet
Du kan snabbt distribuera exempelappen i den här självstudien och se den köras i Azure. Kör bara följande kommandon i Azure Cloud Shell och följ anvisningarna:
mkdir msdocs-tomcat-mysql-sample-app
cd msdocs-tomcat-mysql-sample-app
azd init --template msdocs-tomcat-mysql-sample-app
azd up
1. Kör exemplet
Först konfigurerar du en exempeldatadriven app som utgångspunkt. Exempellagringsplatsen innehåller för enkelhetens skull en konfiguration av utvecklingscontainer. Utvecklingscontainern har allt du behöver för att utveckla ett program, inklusive databasen, cachen och alla miljövariabler som krävs av exempelprogrammet. Utvecklingscontainern kan köras i ett GitHub-kodområde, vilket innebär att du kan köra exemplet på valfri dator med en webbläsare.
Steg 1: I ett nytt webbläsarfönster:
- Logga in på ditt GitHub-konto.
- Navigera till https://github.com/Azure-Samples/msdocs-tomcat-mysql-sample-app/fork.
- Avmarkera Kopiera endast huvudgrenen. Du vill ha alla grenar.
- Välj Skapa förgrening.
Steg 2: I GitHub-förgreningen:
- Välj main>starter-no-infra för startgrenen. Den här grenen innehåller bara exempelprojektet och inga Azure-relaterade filer eller konfigurationer.
- Välj Kod>Skapa kodområde på starter-no-infra. Det tar några minuter att konfigurera kodområdet.
Steg 3: I kodområdesterminalen:
- Kör
mvn jetty:run
. - När du ser meddelandet
Your application running on port 80 is available.
väljer du Öppna i webbläsare. Du bör se exempelprogrammet på en ny webbläsarflik. Om du vill stoppa Jetty-servern skriver duCtrl
+C
.
Dricks
Du kan fråga GitHub Copilot om den här lagringsplatsen. Till exempel:
- @workspace Vad gör det här projektet?
- @workspace Vad gör mappen .devcontainer?
Har du problem? Kontrollera felsökningsavsnittet.
2. Skapa App Service och MySQL
Först skapar du Azure-resurserna. Stegen som används i den här självstudien skapar en uppsättning säkra som standardresurser som inkluderar App Service och Azure Database for MySQL. För skapandeprocessen anger du:
- Webbappens namn . Den används som en del av DNS-namnet för din app i form av
https://<app-name>-<hash>.<region>.azurewebsites.net
. - Regionen som ska köra appen fysiskt i världen. Den används också som en del av DNS-namnet för din app.
- Runtime-stacken för appen. Det är där du väljer vilken version av Java som ska användas för din app.
- Värdplanen för appen. Det är prisnivån som innehåller uppsättningen funktioner och skalningskapacitet för din app.
- Resursgruppen för appen. Med en resursgrupp kan du gruppera (i en logisk container) alla Azure-resurser som behövs för programmet.
Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service-resurser.
Steg 1: I Azure Portal:
- Ange "webbappdatabas" i sökfältet överst i Azure Portal.
- Välj objektet webapp + databas under rubriken Marketplace . Du kan också navigera till guiden för att skapa direkt.
Steg 2: På sidan Skapa webbapp + databas fyller du i formuläret på följande sätt.
- Resursgrupp: Välj Skapa ny och använd namnet msdocs-tomcat-mysql-tutorial.
- Region: Alla Azure-regioner nära dig.
- Namn: msdocs-tomcat-mysql-XYZ, där XYZ är tre slumpmässiga tecken.
- Körningsstack: Java 17.
- Java-webbserverstack: Apache Tomcat 10.1.
- MySQL – Flexibel server väljs som standard som databasmotor. Om inte väljer du det. Azure Database for MySQL är en fullständigt hanterad MySQL-databas som en tjänst i Azure, kompatibel med de senaste community-utgåvorna.
- Värdplan: Basic. När du är klar kan du skala upp till en prisnivå för produktion.
- Välj Granska + skapa.
- När valideringen är klar väljer du Skapa.
Steg 3: Distributionen tar några minuter att slutföra. När distributionen är klar väljer du knappen Gå till resurs . Du tas direkt till App Service-appen, men följande resurser skapas:
- Resursgrupp: Containern för alla skapade resurser.
- App Service-plan: Definierar beräkningsresurserna för App Service. En Linux-plan på Basic-nivån skapas.
- App Service: Representerar din app och körs i App Service-planen.
- Virtuellt nätverk: Integrerat med App Service-appen och isolerar serverdelsnätverkstrafik.
- Flexibel Azure Database for MySQL-server: Endast tillgänglig från det virtuella nätverket. En databas och en användare skapas åt dig på servern.
- Privat DNS zoner: Aktivera DNS-matchning för databasservern i det virtuella nätverket.
Har du problem? Kontrollera felsökningsavsnittet.
3. Skydda anslutningshemligheter
Guiden för att skapa genererade anslutningssträngen åt dig redan som en appinställning. Bästa praxis för säkerhet är dock att hålla hemligheter borta från App Service helt. Du flyttar dina hemligheter till ett nyckelvalv och ändrar appinställningen till en Key Vault-referens med hjälp av Service Connectors.
Steg 1: På App Service-sidan:
- I den vänstra menyn väljer du Inställningar > Miljövariabler.
- Välj AZURE_MYSQL_CONNECTIONSTRING. Den innehåller en JDBC-anslutningssträng. Om du lägger till en appinställning som innehåller en giltig Oracle-, SQL Server-, PostgreSQL- eller MySQL-anslutningssträng, matar App Service in den som en JNDI-datakälla (Java Naming and Directory Interface) i Tomcat-serverns context.xml-fil.
- I inställningen Lägg till/redigera program går du till fältet Värde och letar upp delen password= i slutet av strängen.
- Kopiera lösenordssträngen efter Password= för senare användning. Med den här appinställningen kan du ansluta till MySQL-databasen som skyddas bakom en privat slutpunkt. Hemligheten sparas dock direkt i App Service-appen, vilket inte är det bästa. Du ändrar det här.
Steg 2: Skapa ett nyckelvalv för säker hantering av hemligheter.
- I det övre sökfältet skriver du "key vault" och väljer sedan Marketplace>Key Vault.
- I Resursgrupp väljer du msdocs-tomcat-mysql-tutorial.
- I Key Vault-namn skriver du ett namn som endast består av bokstäver och siffror.
- I Region anger du den till exempelplatsen som resursgrupp.
Steg 3:
- Välj fliken Nätverk.
- Avmarkera Aktivera offentlig åtkomst.
- Välj Skapa en privat slutpunkt.
- I Resursgrupp väljer du msdocs-tomcat-mysql-tutorial.
- I Key Vault-namn skriver du ett namn som endast består av bokstäver och siffror.
- I Region anger du den till exempelplatsen som resursgrupp.
- I dialogrutan i Plats väljer du samma plats som din App Service-app.
- I Resursgrupp väljer du msdocs-tomcat-mysql-tutorial.
- I Namn skriver du msdocs-tomcat-mysql-XYZVaultEndpoint.
- I Virtuellt nätverk väljer du msdocs-tomcat-mysql-XYZVnet.
- I undernätet msdocs-tomcat-mysql-XYZSubnet.
- Välj OK.
- Välj Granska + skapa och välj sedan Skapa. Vänta tills key vault-distributionen är klar. Du bör se "Distributionen är klar".
Steg 4:
- I det övre sökfältet skriver du msdocs-tomcat-mysql och sedan App Service-resursen msdocs-tomcat-mysql-XYZ.
- På sidan App Service går du till den vänstra menyn och väljer Inställningar > Tjänstanslutning. Det finns redan en anslutningsapp som guiden för att skapa appen har skapats åt dig.
- Markera kryssrutan bredvid anslutningsappen och välj sedan Redigera.
- På fliken Grundläggande anger du Klienttyp till Java.
- Markera fliken autentisering.
- I Lösenord klistrar du in lösenordet som du kopierade tidigare.
- Välj Lagra hemlighet i Key Vault.
- Under Key Vault-anslutning väljer du Skapa ny. Dialogrutan Skapa anslutning öppnas ovanpå redigeringsdialogrutan.
Steg 5: I dialogrutan Skapa anslutning för Key Vault-anslutningen:
- I Key Vault väljer du det nyckelvalv som du skapade tidigare.
- Välj Granska + skapa. Du bör se att Systemtilldelad hanterad identitet är inställd på Vald.
- När verifieringen är klar väljer du Skapa.
Steg 6: Du är tillbaka i redigeringsdialogrutan för defaultConnector.
- På fliken Autentisering väntar du tills key vault-anslutningsappen har skapats. När den är klar väljer listrutan Key Vault-anslutning automatiskt den.
- Välj Nästa: Nätverk.
- Välj Spara. Vänta tills meddelandet Uppdatera lyckades visas.
Steg 7: Verifiera ändringarna:
- På den vänstra menyn väljer du Miljövariabler > Anslutningssträngar igen.
- Bredvid AZURE_MYSQL_CONNECTIONSTRING väljer du Visa värde. Värdet ska vara
@Microsoft.KeyVault(...)
, vilket innebär att det är en nyckelvalvsreferens eftersom hemligheten nu hanteras i nyckelvalvet.
Har du problem? Kontrollera felsökningsavsnittet.
4. Bekräfta JNDI-datakällan
Om du lägger till en appinställning som innehåller en giltig JDBC-anslutningssträng för Oracle, SQL Server, PostgreSQL eller MySQL lägger App Service till en JNDI-datakälla (Java Naming and Directory Interface) för den i Tomcat-serverns context.xml-fil. I det här steget använder du SSH-anslutningen till appcontainern för att verifiera JNDI-datakällan. Under processen får du lära dig att komma åt SSH-gränssnittet för Tomcat-containern.
Steg 1: Tillbaka på App Service-sidan:
- I den vänstra menyn väljer du SSH.
- Välj Gå.
Steg 2: Kör i SSH-terminalen cat /usr/local/tomcat/conf/context.xml
. Du bör se att en JNDI-resurs med namnet jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
har lagts till. Du använder den här datakällan senare.
Kommentar
Endast ändringar i filer i /home
kan bevaras utöver omstarter av appar. Om du till exempel redigerar /usr/local/tomcat/conf/server.xml
sparas ändringarna inte längre än en appomstart.
Har du problem? Kontrollera felsökningsavsnittet.
5. Distribuera exempelkod
I det här steget konfigurerar du GitHub-distribution med GitHub Actions. Det är bara ett av många sätt att distribuera till App Service, men också ett bra sätt att ha kontinuerlig integrering i distributionsprocessen. Som standard startar varje git push
till din GitHub-lagringsplats bygg- och distributionsåtgärden.
Precis som Tomcat-konventionen, om du vill distribuera till rotkontexten för Tomcat, namnge din skapade artefakt ROOT.war.
Steg 1: På sidan App Service går du till den vänstra menyn och väljer Distributionscenter.
Steg 2: På sidan Distributionscenter:
- I Källa väljer du GitHub. Som standard är GitHub Actions valt som byggprovider.
- Logga in på ditt GitHub-konto och följ anvisningarna för att auktorisera Azure.
- I Organisation väljer du ditt konto.
- I Lagringsplats väljer du msdocs-tomcat-mysql-sample-app.
- I Gren väljer du starter-no-infra. Det här är samma gren som du arbetade i med exempelappen, utan några Azure-relaterade filer eller konfigurationer.
- Som Autentiseringstyp väljer du Användartilldelad identitet.
- I den översta menyn väljer du Spara. App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i
.github/workflows
katalogen. Som standard skapar distributionscentret en användartilldelad identitet för arbetsflödet som ska autentiseras med Hjälp av Microsoft Entra (OIDC-autentisering). Alternativa autentiseringsalternativ finns i Distribuera till App Service med GitHub Actions.
Steg 3: Kör i GitHub-kodområdet i exempelgrenen git pull origin starter-no-infra
.
Detta hämtar den nyligen incheckade arbetsflödesfilen till ditt kodområde.
Steg 4 (alternativ 1: med GitHub Copilot):
- Starta en ny chattsession genom att klicka på vyn Chatt och sedan klicka på +.
- Fråga: "@workspace Hur ansluter appen till databasen?" Copilot kan ge dig en förklaring om datakällan och hur den
jdbc/MYSQLDS
har konfigurerats. - Fråga: "@workspace jag vill ersätta datakällan som definierats i persistence.xml med en befintlig JNDI-datakälla i Tomcat, men jag vill göra det dynamiskt.". Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i klassen ContextListener .
- Öppna src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java i utforskaren och lägg till kodförslaget
contextInitialized
i metoden. GitHub Copilot ger dig inte samma svar varje gång, du kan behöva ställa fler frågor för att finjustera svaret. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.
Steg 4 (alternativ 2: utan GitHub Copilot):
- Öppna src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java i utforskaren. När programmet startar läser den här klassen in databasinställningarna i src/main/resources/META-INF/persistence.xml.
contextIntialized()
I metoden letar du upp den kommenterade koden (raderna 29–33) och avkommenteras. Den här koden kontrollerar om appinställningenAZURE_MYSQL_CONNECTIONSTRING
finns och ändrar datakällan tilljava:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, som är den datakälla som du hittade tidigare i context.xml i SSH-gränssnittet.
Steg 5:
- Välj källkontrolltillägget.
- I textrutan skriver du ett incheckningsmeddelande som
Configure Azure data source
. - Välj Checka in och bekräfta sedan med Ja.
- Välj Synkronisera ändringar 1 och bekräfta sedan med OK.
Steg 6: Tillbaka på sidan Distributionscenter i Azure Portal:
- Välj Loggar. En ny distributionskörning har redan startats från de incheckade ändringarna.
- I loggobjektet för distributionskörningen väljer du posten Skapa/distribuera loggar med den senaste tidsstämpeln .
Steg 7: Du tas till din GitHub-lagringsplats och ser att GitHub-åtgärden körs. Arbetsflödesfilen definierar två separata steg, skapa och distribuera. Vänta tills GitHub-körningen visar statusen Slutförd. Det tar ungefär 5 minuter.
Har du problem? Kontrollera felsökningsavsnittet.
6. Bläddra till appen
Steg 1: På App Service-sidan:
- Välj Översikt på den vänstra menyn.
- Välj appens URL.
Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for MySQL.
Har du problem? Kontrollera felsökningsavsnittet.
7. Strömma diagnostikloggar
Azure App Service samlar in alla meddelanden som skickas till konsolen för att hjälpa dig att diagnostisera problem med ditt program. Exempelprogrammet innehåller log4j-standardloggningsinstruktioner för att demonstrera den här funktionen, enligt följande kodfragment:
@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("GET /");
EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");
Steg 1: På App Service-sidan:
- Välj App Service-loggar på den vänstra menyn.
- Under Programloggning väljer du Filsystem.
- I den översta menyn väljer du Spara.
Steg 2: Välj Loggström på den vänstra menyn. Du ser loggarna för din app, inklusive plattformsloggar och loggar inifrån containern.
Läs mer om loggning i Java-appar i serien på Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.
Har du problem? Kontrollera felsökningsavsnittet.
8. Rensa resurser
När du är klar kan du ta bort alla resurser från din Azure-prenumeration genom att ta bort resursgruppen.
Steg 1: I sökfältet överst i Azure Portal:
- Ange resursgruppsnamnet.
- Välj resursgruppen.
Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.
Steg 3:
- Bekräfta borttagningen genom att skriva resursgruppens namn.
- Välj Ta bort.
- Bekräfta med Ta bort igen.
2. Skapa Azure-resurser och distribuera en exempelapp
I det här steget skapar du Azure-resurserna och distribuerar en exempelapp för att App Service på Linux. Stegen som används i den här självstudien skapar en uppsättning säkra som standardresurser som inkluderar App Service och Azure Database for MySQL.
Utvecklingscontainern har redan Azure Developer CLI (AZD).
Från lagringsplatsens rot kör du
azd init
.azd init --template tomcat-app-service-mysql-infra
När du uppmanas att ge följande svar:
Fråga Svar Den aktuella katalogen är inte tom. Vill du initiera ett projekt här i "<din katalog>"? Y Vad vill du göra med de här filerna? Behåll mina befintliga filer oförändrade Ange ett nytt miljönamn Skriv ett unikt namn. AZD-mallen använder det här namnet som en del av DNS-namnet på din webbapp i Azure ( <app-name>-<hash>.azurewebsites.net
). Alfanumeriska tecken och bindestreck tillåts.Logga in på Azure genom att
azd auth login
köra kommandot och följa kommandotolken:azd auth login
Skapa nödvändiga Azure-resurser och distribuera appkoden med
azd up
kommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.azd up
Kommandot
azd up
tar cirka 15 minuter att slutföra (Redis-cachen tar mest tid). Den kompilerar och distribuerar även programkoden, men du ändrar koden senare så att den fungerar med App Service. När den körs innehåller kommandot meddelanden om etablerings- och distributionsprocessen, inklusive en länk till distributionen i Azure. När det är klart visar kommandot även en länk till distributionsprogrammet.Den här AZD-mallen innehåller filer (azure.yaml och infra-katalogen ) som genererar en säker arkitektur som standard med följande Azure-resurser:
- Resursgrupp: Containern för alla skapade resurser.
- App Service-plan: Definierar beräkningsresurserna för App Service. En Linux-plan på B1-nivån skapas.
- App Service: Representerar din app och körs i App Service-planen.
- Virtuellt nätverk: Integrerat med App Service-appen och isolerar serverdelsnätverkstrafik.
- Flexibel Azure Database for MySQL-server: Endast tillgänglig från det virtuella nätverket via DNS-zonintegrering. En databas skapas åt dig på servern.
- Azure Cache for Redis: Endast tillgänglig inifrån det virtuella nätverket.
- Privata slutpunkter: Åtkomstslutpunkter för nyckelvalvet och Redis-cachen i det virtuella nätverket.
- Privat DNS zoner: Aktivera DNS-matchning av nyckelvalvet, databasservern och Redis-cachen i det virtuella nätverket.
- Log Analytics-arbetsyta: Fungerar som målcontainer för din app för att skicka loggarna, där du även kan köra frågor mot loggarna.
- Nyckelvalv: Används för att behålla databaslösenordet på samma sätt när du distribuerar om med AZD.
När kommandot har skapat resurser och distribuerat programkoden första gången fungerar inte den distribuerade exempelappen ännu eftersom du måste göra små ändringar för att den ska kunna ansluta till databasen i Azure.
Har du problem? Kontrollera felsökningsavsnittet.
3. Kontrollera anslutningssträng
Den AZD-mall som du använder genererade anslutningsvariablerna åt dig redan som appinställningar och matar ut dem till terminalen för din bekvämlighet. Appinställningar är ett sätt att hålla anslutningshemligheter borta från din kodlagringsplats.
Leta reda på appinställningen
AZURE_MYSQL_CONNECTIONSTRING
i AZD-utdata. Endast inställningsnamnen visas. De ser ut så här i AZD-utdata:App Service app has the following connection strings: - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
AZURE_MYSQL_CONNECTIONSTRING
innehåller anslutningssträng till MySQL-databasen i Azure. Du måste använda den i koden senare.För att underlätta för dig visar AZD-mallen direktlänken till appens appinställningarssida. Hitta länken och öppna den på en ny webbläsarflik.
Om du lägger till en appinställning som innehåller en giltig Oracle-, SQL Server-, PostgreSQL- eller MySQL-anslutningssträng lägger App Service till den som en JNDI-datakälla (Java Naming and Directory Interface) i Tomcat-serverns context.xml fil.
Har du problem? Kontrollera felsökningsavsnittet.
4. Bekräfta JNDI-datakällan
I det här steget använder du SSH-anslutningen till appcontainern för att verifiera JNDI-datakällan på Tomcat-servern. Under processen får du lära dig att komma åt SSH-gränssnittet för Tomcat-containern.
I AZD-utdata letar du reda på URL:en för SSH-sessionen och navigerar till den i webbläsaren. Det ser ut så här i utdata:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
I SSH-terminalen kör du
cat /usr/local/tomcat/conf/context.xml
. Du bör se att en JNDI-resurs med namnetjdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
har lagts till. Du använder den här datakällan senare.
Kommentar
Endast ändringar i filer i /home
kan bevaras utöver omstarter av appar. Om du till exempel redigerar /usr/local/tomcat/conf/server.xml
sparas ändringarna inte längre än en appomstart.
Har du problem? Kontrollera felsökningsavsnittet.
5. Ändra exempelkod och distribuera om
Starta en ny chattsession i GitHub-kodområdet genom att klicka på vyn Chatt och sedan klicka på +.
Fråga: "@workspace Hur ansluter appen till databasen?" Copilot kan ge dig en förklaring om datakällan och hur den
jdbc/MYSQLDS
har konfigurerats.Fråga: "@workspace jag vill ersätta datakällan som definierats i persistence.xml med en befintlig JNDI-datakälla i Tomcat, men jag vill göra det dynamiskt." Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i klassen ContextListener .
Öppna src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java i utforskaren och lägg till kodförslaget
contextInitialized
i metoden.GitHub Copilot ger dig inte samma svar varje gång, du kan behöva ställa andra frågor för att finjustera dess svar. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.
Kör i codespace-terminalen
azd deploy
.azd deploy
Dricks
Du kan också bara använda azd up
always, vilket gör allt av azd package
, azd provision
och azd deploy
.
Om du vill ta reda på hur War-filen paketeras kan du köra azd package --debug
själv.
Har du problem? Kontrollera felsökningsavsnittet.
6. Bläddra till appen
I AZD-utdata letar du reda på url:en för din app och navigerar till den i webbläsaren. URL:en ser ut så här i AZD-utdata:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Lägg till några uppgifter i listan.
Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for MySQL.
Har du problem? Kontrollera felsökningsavsnittet.
7. Strömma diagnostikloggar
Azure App Service kan samla in konsolloggar som hjälper dig att diagnostisera problem med ditt program. För enkelhetens skull har AZD-mallen redan aktiverat loggning till det lokala filsystemet och skickar loggarna till en Log Analytics-arbetsyta.
Exempelprogrammet innehåller log4j-standardloggningsinstruktioner för att demonstrera den här funktionen, enligt följande kodfragment:
@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("GET /");
EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");
I AZD-utdata hittar du länken för att strömma App Service-loggar och navigera till den i webbläsaren. Länken ser ut så här i AZD-utdata:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Läs mer om loggning i Java-appar i serien på Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.
Har du problem? Kontrollera felsökningsavsnittet.
8. Rensa resurser
Om du vill ta bort alla Azure-resurser i den aktuella distributionsmiljön kör azd down
du och följer anvisningarna.
azd down
Felsökning
- Jag ser många <klassgenomsökt> från flera platser varningar med mvn brygga:kör
- Portaldistributionsvyn för Azure Database for MySQL – flexibel server visar konfliktstatus
- Den distribuerade exempelappen visar inte uppgiftslistappen
- Jag ser ett fel på 404-sidan hittades inte i den distribuerade exempelappen
Jag ser många <klassgenomsökt> från flera platser varningar med mvn brygga:kör
Du kan ignorera varningarna. Plugin-programmet Maven Jetty visar varningarna eftersom appens pom.xml innehåller beroendet för jakarta.servlet.jsp.jstl
, som Jetty redan tillhandahåller direkt. Du behöver beroendet för Tomcat.
Portaldistributionsvyn för Azure Database for MySQL – flexibel server visar konfliktstatus
Beroende på din prenumeration och den region du väljer kan distributionsstatusen för Azure Database for MySQL – flexibel server vara Conflict
, med följande meddelande i Åtgärdsinformation:
InternalServerError: An unexpected error occured while processing the request.
Det här felet orsakas troligen av en gräns för din prenumeration för den region du väljer. Prova att välja en annan region för distributionen.
Den distribuerade exempelappen visar inte uppgiftslistappen
Om du ser en Hey, Java developers!
sida i stället för aktivitetslistappen läser App Service förmodligen fortfarande in den uppdaterade containern från din senaste koddistribution. Vänta några minuter och uppdatera sidan.
Jag ser ett fel på 404-sidan hittades inte i den distribuerade exempelappen
Kontrollera att du har gjort kodändringarna för att använda java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
datakällan. Om du har gjort ändringarna och omdistribuerat koden läser App Service förmodligen fortfarande in den uppdaterade containern. Vänta några minuter och uppdatera sidan.
Vanliga frågor och svar
- Hur mycket kostar den här installationen?
- Hur gör jag för att ansluta till MySQL-servern bakom det virtuella nätverket med andra verktyg?
- Hur fungerar utveckling av lokala appar med GitHub Actions?
- Jag har inte behörighet att skapa en användartilldelad identitet
- Vad kan jag göra med GitHub Copilot i mitt kodområde?
Hur mycket kostar den här installationen?
Prissättningen för de skapade resurserna är följande:
- App Service-planen skapas på Basic-nivån och kan skalas upp eller ned. Se Priser för App Service.
- Den flexibla MySQL-servern skapas på B1ms-nivån och kan skalas upp eller ned. Med ett kostnadsfritt Azure-konto är B1ms-nivån kostnadsfri i 12 månader, upp till månadsgränserna. Se Priser för Azure Database for MySQL.
- Azure Cache for Redis skapas på Basic-nivån med den minsta cachestorleken. Det finns en liten kostnad som är associerad med den här nivån. Du kan skala upp den till högre prestandanivåer för högre tillgänglighet, klustring och andra funktioner. Se Priser för Azure Cache for Redis.
- Det virtuella nätverket debiteras inte om du inte konfigurerar extra funktioner, till exempel peering. Se Priser för Azure Virtual Network.
- Den privata DNS-zonen medför en liten avgift. Se Priser för Azure DNS.
Hur gör jag för att ansluta till MySQL-servern bakom det virtuella nätverket med andra verktyg?
- Tomcat-containern har för närvarande inte terminalen
mysql-client
också. Om du vill måste du installera den manuellt. Kom ihåg att allt du installerar inte finns kvar i omstarter av appar. - Om du vill ansluta från ett skrivbordsverktyg som MySQL Workbench måste datorn finnas i det virtuella nätverket. Det kan till exempel vara en virtuell Azure-dator i ett av undernäten eller en dator i ett lokalt nätverk som har en VPN-anslutning från plats till plats med det virtuella Azure-nätverket.
- Du kan också integrera Azure Cloud Shell med det virtuella nätverket.
Hur fungerar utveckling av lokala appar med GitHub Actions?
Med hjälp av den automatiskt genererade arbetsflödesfilen från App Service som exempel startar var git push
och en ny bygg- och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen gör du önskade uppdateringar och push-överför till GitHub. Till exempel:
git add .
git commit -m "<some-message>"
git push origin main
Jag har inte behörighet att skapa en användartilldelad identitet
Se Konfigurera GitHub Actions-distribution från Distributionscenter.
Vad kan jag göra med GitHub Copilot i mitt kodområde?
Du kanske märker att GitHub Copilot-chattvyn redan fanns där när du skapade kodområdet. För din bekvämlighet inkluderar vi GitHub Copilot-chatttillägget i containerdefinitionen (se .devcontainer/devcontainer.json). Du behöver dock ett GitHub Copilot-konto (30 dagars kostnadsfri utvärderingsversion tillgänglig).
Några tips när du pratar med GitHub Copilot:
- I en enda chattsession bygger frågorna och svaren på varandra och du kan justera dina frågor för att finjustera det svar du får.
- Som standard har GitHub Copilot inte åtkomst till någon fil på lagringsplatsen. Om du vill ställa frågor om en fil öppnar du filen i redigeraren först.
- Om du vill ge GitHub Copilot åtkomst till alla filer på lagringsplatsen när du förbereder dess svar börjar du din fråga med
@workspace
. Mer information finns i Use the @workspace agent. - I chattsessionen kan GitHub Copilot föreslå ändringar och (med
@workspace
) även var ändringarna ska utföras, men det är inte tillåtet att göra ändringarna åt dig. Det är upp till dig att lägga till de föreslagna ändringarna och testa dem.
Här är några andra saker du kan säga för att finjustera svaret du får:
- Ändra den här koden så att den använder datakällan jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
- Vissa importer i koden använder javax men jag har en Jakarta-app.
- Jag vill att den här koden bara ska köras om miljövariabeln AZURE_MYSQL_CONNECTIONSTRING har angetts.
- Jag vill att den här koden endast ska köras i Azure App Service och inte lokalt.
Nästa steg
Läs mer om att köra Java-appar på App Service i utvecklarguiden.
Lär dig hur du skyddar din app med en anpassad domän och ett certifikat.