Självstudie: Skapa en Java Spring Boot-webbapp med Azure App Service på Linux och Azure Cosmos DB
Kommentar
För Spring-program rekommenderar vi att du använder Azure Spring Apps. Du kan dock fortfarande använda Azure App Service som mål.
Den här självstudien vägleder dig genom processen för att skapa, konfigurera, distribuera och skala Java-webbappar på Azure. När du är klar har du en Spring Boot-app som lagrar data i Azure Cosmos DB och körs på Azure App Service på Linux.
I den här självstudien lär du dig att:
- Skapa en Azure Cosmos DB-databas.
- Ansluta en exempelapp till databasen och testa den lokalt
- Distribuera exempelappen till Azure
- Strömma diagnostikloggar från App Service
- Lägga till ytterligare instanser för att skala ut exempelappen
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
Klona TODO-appen och förbereda lagringsplatsen
Den här självstudien använder ett exempel på en TODO-listapp med ett webbgränssnitt som anropar ett Spring REST API som backas upp av Spring Data för Azure Cosmos DB. Koden för appen är tillgänglig på GitHub. Mer information om hur du skriver Java-appar med Spring och Azure Cosmos DB finns i Spring Boot Starter med Azure Cosmos DB for NoSQL-självstudien och snabbstarten Spring Data for Azure Cosmos DB.
Kör följande kommandon i terminalen för att klona exempelrepo och konfigurera exempelappmiljön.
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
cd e2e-java-experience-in-app-service-linux-part-2
yes | cp -rf .prep/* .
Skapa en Azure Cosmos DB
Följ dessa steg för att skapa en Azure Cosmos DB-databas i din prenumeration. TODO-listappen ansluts till databasen och lagrar sina data under körning och sparar programtillståndet oavsett var du kör programmet.
Logga in på Azure CLI och ange din prenumeration om du har fler än en ansluten till dina inloggningsuppgifter.
az login az account set -s <your-subscription-id>
Skapa en Azure-resursgrupp och notera resursgruppens namn.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Skapa Azure Cosmos DB av typen
GlobalDocumentDB
. Namnet på Azure Cosmos DB-instansen får endast använda gemener. Anteckna fältetdocumentEndpoint
i svaret från kommandot.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Hämta din Azure Cosmos DB-nyckel för att ansluta till appen.
primaryMasterKey
Behåll ,documentEndpoint
i närheten eftersom du behöver dem i nästa steg.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Konfigurera egenskaper för TODO-appen
Öppna en terminal på datorn. Kopiera exempelskriptfilen på den klonade lagringsplatsen så att du kan anpassa den för den Azure Cosmos DB-databas som du nyss skapade.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Redigera .scripts/set-env-variables.sh
i din favoritredigerare och ange anslutningsinformation för Azure Azure Cosmos DB. För App Service Linux-konfigurationen använder du samma region som före (your-resource-group-region
) och resursgruppen (your-azure-group-name
) som användes när du skapade Azure Cosmos DB-databasen. Välj ett WEBAPP_NAME som är unikt eftersom det inte kan duplicera alla webbappnamn i alla Azure-distributioner.
export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>
Kör sedan skriptet:
source .scripts/set-env-variables.sh
Dessa miljövariabler används i application.properties
i TODO-listappen. Fälten i egenskapsfilen konfigurerar en standardkonfiguration för databasen för Spring Data:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Sedan använder exempelappen anteckningen @Document
som importerats från com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
för att konfigurera en entitetstyp som ska lagras och hanteras av Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Kör exempelappen
Använd Maven för att köra exemplet.
mvn package spring-boot:run
Resultatet bör likna följande.
bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101 INFO 7673 --- [ main] c.m.azure.documentdb.DocumentClient : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)
Du kan komma åt Spring TODO-appen lokalt med hjälp av den här länken när appen startas: http://localhost:8080/
.
Om du ser undantag i stället för meddelandet "Startad todoApplication" kontrollerar du att skriptet bash
i föregående steg exporterade miljövariablerna korrekt och att värdena är korrekta för den Azure Cosmos DB-databas som du skapade.
Konfigurera Azure-distribution
pom.xml
Öppna filen i initial/spring-boot-todo
katalogen och lägg till följande Azure Web App-plugin-program för Maven-konfiguration.
<plugins>
<!--*************************************************-->
<!-- Deploy to Java SE in App Service Linux -->
<!--*************************************************-->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<!-- Web App information -->
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<!-- Java Runtime Stack for Web App on Linux-->
<runtime>
<os>linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>Java SE</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
<appSettings>
<property>
<name>COSMOSDB_URI</name>
<value>${COSMOSDB_URI}</value>
</property>
<property>
<name>COSMOSDB_KEY</name>
<value>${COSMOSDB_KEY}</value>
</property>
<property>
<name>COSMOSDB_DBNAME</name>
<value>${COSMOSDB_DBNAME}</value>
</property>
<property>
<name>JAVA_OPTS</name>
<value>-Dserver.port=80</value>
</property>
</appSettings>
</configuration>
</plugin>
...
</plugins>
Distribuera till App Service i Linux
Använd mvn azure-webapp:deploy
Maven-målet för att distribuera TODO-appen till Azure App Service i Linux.
# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[INFO] Creating web App spring-todo-app...
[INFO] Successfully created Web App spring-todo-app.
[INFO] Trying to deploy artifact to spring-todo-app...
[INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
Utdata innehåller URL till dina distribuerade program (i det här exemplet https://spring-todo-app.azurewebsites.net
). Du kan kopiera denna URL i webbläsaren eller köra följande kommando i terminalfönstret för att läsa in din app.
explorer https://spring-todo-app.azurewebsites.net
Du bör se när appen körs med fjärrwebbadressen i adressfältet:
Strömma diagnostikloggar
Om du vill komma åt konsolloggarna som genereras i din programkod i App Service aktiverar du diagnostisk loggning genom att köra följande kommando i Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Möjliga värden för --level
är: Error
, Warning
, Info
och Verbose
. Varje efterföljande nivå omfattar den föregående nivån. Exempel: Error
omfattar endast felmeddelanden och Verbose
omfattar alla meddelanden.
När diagnostisk loggning har aktiverats kör du följande kommando för att visa loggströmmen:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.
Kommentar
Du kan även granska loggfilerna från din webbläsare via https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Skriv Ctrl
+C
när som helst för att stoppa loggströmningen.
Skala ut TODO-appen
Skala ut programmet genom att lägga till en annan arbetsroll:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Rensa resurser
Om du inte behöver de här resurserna för en annan självstudie (se Nästa steg) kan du ta bort dem genom att köra följande kommando i Cloud Shell:
az group delete --name <your-azure-group-name> --yes
Nästa steg
Azure for Java Developers Spring Boot, Spring Data för Azure Cosmos DB, Azure Cosmos DB och App Service Linux.
Läs mer om hur du kör Java-appar i App Service på Linux i utvecklarhandboken.
Lär dig hur du skyddar din app med en anpassad domän och ett certifikat.