Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuDen här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
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:
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
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:
Steg 2: I GitHub-förgreningen:
Steg 3: I kodområdesterminalen:
mvn jetty:run
.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 du Ctrl
+C
.Tips
Du kan fråga GitHub Copilot om den här lagringsplatsen. Till exempel:
Har du problem? Kontrollera felsökningsavsnittet.
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:
https://<app-name>-<hash>.<region>.azurewebsites.net
.Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service-resurser.
Steg 1: I Azure Portal:
Steg 2: På sidan Skapa webbapp + databas fyller du i formuläret på följande sätt.
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:
Har du problem? Kontrollera felsökningsavsnittet.
Guiden skapa genererade databasanslutningssträ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: Hämta den befintliga anslutningssträng
Steg 2: Skapa ett nyckelvalv för säker hantering av hemligheter
Steg 3: Skydda nyckelvalvet med en privat slutpunkt
Steg 4: Konfigurera tjänstanslutningsappen
Steg 5: Upprätta Key Vault-anslutningen
Steg 6: Slutför konfigurationen av Service Connector
Steg 7: Verifiera Key Vault-integreringen
@Microsoft.KeyVault(...)
, vilket innebär att det är en nyckelvalvsreferens eftersom hemligheten nu hanteras i nyckelvalvet.För att sammanfatta innebar processen att hämta MySQL-anslutningssträng från App Service miljövariabler, skapa ett Azure Key Vault för säker hemlig hantering med privat åtkomst och uppdatera tjänstanslutningen för att lagra lösenordet i nyckelvalvet. En säker anslutning mellan App Service-appen och nyckelvalvet upprättades med hjälp av en systemtilldelad hanterad identitet och konfigurationen verifierades genom att bekräfta att anslutningssträng använder en Key Vault-referens.
Har du problem? Kontrollera felsökningsavsnittet.
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:
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.
Anteckning
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.
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:
.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):
jdbc/MYSQLDS
har konfigurerats.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):
contextIntialized()
I metoden letar du upp den kommenterade koden (raderna 29–33) och avkommenteras.
Den här koden kontrollerar om appinställningen AZURE_MYSQL_CONNECTIONSTRING
finns och ändrar datakällan till java: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:
Configure Azure data source
.Steg 6: Tillbaka på sidan Distributionscenter i Azure Portal:
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.
Steg 1: På App Service-sidan:
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.
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:
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 aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.
Har du problem? Kontrollera felsökningsavsnittet.
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:
Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.
Steg 3:
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:
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.
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.
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 namnet jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
har lagts till. Du använder den här datakällan senare.
Anteckning
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.
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
Tips
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.
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.
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 aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.
Har du problem? Kontrollera felsökningsavsnittet.
Om du vill ta bort alla Azure-resurser i den aktuella distributionsmiljön kör azd down
du och följer anvisningarna.
azd down
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.
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.
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.
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.
Prissättningen för de skapade resurserna är följande:
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.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
Se Konfigurera GitHub Actions-distribution från Distributionscenter.
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:
@workspace
. Mer information finns i Use the @workspace agent.@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:
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.
Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuUtbildning
Utbildningsväg
Metodtips för Java-program i Azure - Training
Börja här och lär dig hur du kan övervaka, automatisera, finjustera, autoskala, skydda och skapa Java-appar i Azure. Använd som alltid verktyg och ramverk som du känner till och älskar – Spring, Tomcat, WildFly, JBoss, WebLogic, WebSphere, Maven, Gradle, IntelliJ, Eclipse, Jenkins, Terraform med mera.
Certifiering
Microsoft-certifierad: Azure-databasadministratör associate - Certifications
Administrera en SQL Server-databasinfrastruktur för molndatabaser, lokala databaser och hybridrelationsdatabaser med hjälp av microsoft PaaS-relationsdatabaserbjudanden.