Zelfstudie: Een Java Spring Boot-web-app bouwen met Azure-app Service in Linux en Azure Cosmos DB
Notitie
Voor Spring-toepassingen wordt u aangeraden Azure Spring Apps te gebruiken. U kunt echter nog steeds Azure-app Service als bestemming gebruiken.
In deze zelfstudie wordt u door het proces van het ontwikkelen, configureren, implementeren en schalen van Java-web-apps in Azure geleid. Wanneer u klaar bent, hebt u een Spring Boot-toepassing die gegevens opslaat in Azure Cosmos DB op Azure App Service in Linux.
In deze zelfstudie leert u het volgende:
- Hiermee maakt u een Azure Cosmos DB-database.
- Een voorbeeld-app verbinden met de database en deze lokaal testen
- De voorbeeld-app implementeren in Azure
- Logboeken met diagnostische gegevens vanaf App Service streamen
- Extra exemplaren toevoegen om de voorbeeld-app uit te breiden
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
Vereisten
Kloon de voorbeeld-app voor taken en bereid de opslagplaats voor
In deze zelfstudie wordt een voorbeeld van een takenlijst-app gebruikt met een webgebruikersinterface die een Spring REST API aanroept die wordt ondersteund door Spring Data voor Azure Cosmos DB. De code voor de app is beschikbaar op GitHub. Voor meer informatie over het schrijven van Java-apps met Spring en Azure Cosmos DB raadpleegt u de Spring Boot Starter met de zelfstudie Azure Cosmos DB voor NoSQL en de Snelstartgids voor Spring Data voor Azure Cosmos DB.
Voer de volgende opdrachten in de terminal uit om de voorbeeldopslagplaats te klonen en de omgeving van de voorbeeld-app in te stellen.
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/* .
Een Azure Cosmos DB maken
Volg deze stappen voor het maken van een Azure Cosmos DB-database in uw abonnement. De takenlijst-app maakt verbinding met deze database en slaat de gegevens op wanneer deze actief is, waarbij de status van de toepassing wordt behouden ongeacht waar u de toepassing uitvoert.
Meld uw Azure-CLI aan en stel eventueel uw abonnement in als er meer dan één abonnement verbonden is met uw aanmeldingsreferenties.
az login az account set -s <your-subscription-id>
Maak een Azure-resourcegroep, waarbij de naam van de resourcegroep noteert.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Maken Azure Cosmos DB met het
GlobalDocumentDB
type. De naam van het Azure Cosmos DB-exemplaar mag alleen kleine letters gebruiken. Noteer het velddocumentEndpoint
in de reactie van de opdracht.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Haal uw Azure Cosmos DB-sleutel op om verbinding te maken met de app. Houd de
primaryMasterKey
,documentEndpoint
bij de hand, want u hebt ze in de volgende stap nodig.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
De eigenschappen van de takenlijst-app configureren
Open een terminal op uw computer. Kopieer het voorbeeldscriptbestand in de gekloonde opslagplaats, zodat u het kunt aanpassen voor de Azure Cosmos DB-database die u zojuist hebt gemaakt.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Bewerk .scripts/set-env-variables.sh
deze in uw favoriete editor en geef azure Cosmos DB-verbindingsgegevens op. Gebruik voor de Linux-configuratie van App Service dezelfde regio als voorheen (your-resource-group-region
) en resourcegroep (your-azure-group-name
) die wordt gebruikt bij het maken van de Azure Cosmos DB-database. Kies een WEBAPP_NAME die uniek is, omdat hiervoor niet de naam van een web-app in een Azure-implementatie kan worden gedupliceerd.
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>
Voer daarna het script uit:
source .scripts/set-env-variables.sh
Deze omgevingsvariabelen worden in application.properties
in de takenlijst-app gebruikt. Met de velden in het eigenschappenbestand wordt een standaardconfiguratie voor de opslagplaats voor Spring Data ingesteld:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Vervolgens gebruikt de voorbeeld-app de @Document
aantekening waaruit com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
is geïmporteerd om een entiteitstype in te stellen dat moet worden opgeslagen en beheerd door Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
De voorbeeld-app uitvoeren
Gebruik Maven om het voorbeeld uit te voeren.
mvn package spring-boot:run
De uitvoer moet er als volgt uitzien.
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)
U hebt lokaal toegang tot de Spring-takenlijst-app via deze koppeling zodra de app wordt gestart: http://localhost:8080/
.
Als u uitzonderingen ziet in plaats van het bericht 'TodoApplication gestart', controleert u of het script bash
in de vorige stap de omgevingsvariabelen correct heeft geëxporteerd en of de waarden juist zijn voor de Azure Cosmos DB-database die u hebt gemaakt.
Azure-implementatie configureren
Open het bestand pom.xml
in de map initial/spring-boot-todo
en voeg de volgende configuratie van Azure Web App-invoegtoepassing voor Maven toe.
<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>
Implementeren naar App Service in Linux
Gebruik het Maven-doel mvn azure-webapp:deploy
om de takenlijst-app naar Azure App Service te implementeren in 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] ------------------------------------------------------------------------
De uitvoer bevat de URL naar uw geïmplementeerde toepassing (in dit voorbeeld https://spring-todo-app.azurewebsites.net
). U kunt deze URL kopiëren naar uw webbrowser of de volgende opdracht in uw Terminal-venster uitvoeren om uw app te laden.
explorer https://spring-todo-app.azurewebsites.net
U moet de app zien wanneer die wordt uitgevoerd met de externe URL in de adresbalk:
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.
De takenlijst-app uitbreiden
Breid de toepassing uit door een andere werknemer toe te voegen:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Resources opschonen
Als u deze resources niet voor een andere zelfstudie nodig hebt (zie Volgende stappen), kunt u ze verwijderen door de volgende opdracht in de Cloud Shell uit te voeren:
az group delete --name <your-azure-group-name> --yes
Volgende stappen
Azure voor Java-ontwikkelaars Spring Boot, Spring Data voor Azure Cosmos DB, Azure Cosmos DB en App Service Linux.
Lees meer over het uitvoeren van Java-apps in Azure App Service in Linux in de handleiding voor ontwikkelaars.
Meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.