Oktatóanyag: Java Spring Boot-webalkalmazás létrehozása a Linuxon és az Azure Cosmos DB-n futó Azure-alkalmazás Szolgáltatással
Feljegyzés
Spring-alkalmazások esetén az Azure Spring Apps használatát javasoljuk. Azonban továbbra is használhatja a Azure-alkalmazás szolgáltatást célként. Tanácsért tekintse meg a Java számítási feladatok célhelyének útmutatását .
Ez az oktatóanyag végigvezeti a Java-webalkalmazások Azure-beli létrehozásának, konfigurálásának, üzembe helyezésének és méretezésének folyamatán. Ha végzett, egy Spring Boot-alkalmazás tárolja az adatokat az Azure Cosmos DB-ben, amely a Linuxon futó Azure-alkalmazás Szolgáltatáson fut.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Létrehoz egy Azure Cosmos DB-adatbázist.
- Mintaalkalmazás csatlakoztatása az adatbázishoz, és helyi tesztelés
- A mintaalkalmazás üzembe helyezése az Azure-ban
- Diagnosztikai naplók streamelése az App Service-ből
- További példányok hozzáadása a mintaalkalmazás vertikális felskálázásához
Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
Előfeltételek
Klónozza a TODO-mintaalkalmazást, és készítse elő az adattárat
Ez az oktatóanyag egy minta TODO listaalkalmazást használ egy webes felhasználói felülettel, amely a Spring Data által az Azure Cosmos DB-hez készült Spring REST API-t hív meg. Az alkalmazás kódja elérhető a GitHubon. Ha többet szeretne megtudni a Java-alkalmazások Spring és Azure Cosmos DB használatával történő írásáról, tekintse meg a Spring Boot Startert az Azure Cosmos DB for NoSQL-oktatóanyaggal és az Azure Cosmos DB-hez készült Spring Data rövid útmutatójával.
Futtassa az alábbi parancsokat a terminálban a mintaadattár klónozásához és a mintaalkalmazás-környezet beállításához.
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/* .
Azure Cosmos DB létrehozása
Az alábbi lépéseket követve hozzon létre egy Azure Cosmos DB-adatbázist az előfizetésében. A TODO listaalkalmazás csatlakozik ehhez az adatbázishoz, és futtatáskor tárolja az adatait, és az alkalmazás állapotát megőrzi, függetlenül attól, hogy hol futtatja az alkalmazást.
Jelentkezzen be az Azure CLI-be, és igény szerint állítsa be előfizetését, ha többen csatlakoznak a bejelentkezési hitelesítő adataihoz.
az login az account set -s <your-subscription-id>
Hozzon létre egy Azure-erőforráscsoportot az erőforráscsoport nevének megjelölésével.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Hozzon létre ilyen típusú Azure Cosmos DB-t
GlobalDocumentDB
. Az Azure Cosmos DB-példány nevének csak kisbetűket kell használnia. Jegyezze fel adocumentEndpoint
parancs válasz mezőjét.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Szerezze be az Azure Cosmos DB-kulcsot az alkalmazáshoz való csatlakozáshoz.
primaryMasterKey
documentEndpoint
A következő lépésben tartsa a közelben, ahogy szüksége lesz rájuk.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
A TODO-alkalmazás tulajdonságainak konfigurálása
Nyisson meg egy terminált a számítógépén. Másolja a példaszkriptfájlt a klónozott adattárba, hogy testre szabhassa az imént létrehozott Azure Cosmos DB-adatbázishoz.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Szerkessze .scripts/set-env-variables.sh
kedvenc szerkesztőjében, és adja meg az Azure Cosmos DB kapcsolati adatait. Az App Service Linux-konfigurációhoz használja ugyanazt a régiót, mint korábban (your-resource-group-region
) és az Azure Cosmos DB-adatbázis létrehozásakor használt erőforráscsoportot (your-azure-group-name
). Válasszon egyedi WEBAPP_NAME, mivel egyetlen Azure-telepítésben sem duplikálhatja a webalkalmazások nevét.
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>
Ezután futtassa a szkriptet:
source .scripts/set-env-variables.sh
Ezeket a környezeti változókat a TODO listaalkalmazás használja application.properties
. A tulajdonságfájl mezői a Spring Data alapértelmezett adattárkonfigurációját határozzák meg:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Ezután a mintaalkalmazás a @Document
forrásból com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
importált széljegyzet használatával állít be egy entitástípust, amelyet az Azure Cosmos DB tárol és kezel:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
A mintaalkalmazás futtatása
A Minta futtatásához használja a Mavent.
mvn package spring-boot:run
A kimenetnek az alábbihoz hasonlóan kell kinéznie.
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)
A Spring TODO alkalmazást helyileg az alábbi hivatkozás használatával érheti el az alkalmazás elindítása után: http://localhost:8080/
.
Ha a "Started TodoApplication" üzenet helyett kivételeket lát, ellenőrizze, hogy az bash
előző lépésben szereplő szkript megfelelően exportálta-e a környezeti változókat, és hogy az értékek helyesek-e a létrehozott Azure Cosmos DB-adatbázishoz.
Az Azure-telepítés konfigurálása
Nyissa meg a pom.xml
fájlt a initial/spring-boot-todo
címtárban, és adja hozzá a következő Azure Web App Beépülő modult a Maven-konfigurációhoz .
<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>
Üzembe helyezés az App Service-ben Linuxon
mvn azure-webapp:deploy
A Maven-cél használatával helyezze üzembe a TODO alkalmazást Azure-alkalmazás Linuxon futó szolgáltatásban.
# 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] ------------------------------------------------------------------------
A kimenet tartalmazza az üzembe helyezett alkalmazás URL-címét (ebben a példában https://spring-todo-app.azurewebsites.net
). Ezt az URL-címet átmásolhatja a webböngészőbe, vagy a terminálablakban futtathatja a következő parancsot az alkalmazás betöltéséhez.
explorer https://spring-todo-app.azurewebsites.net
A címsorban a távoli URL-címmel futó alkalmazásnak kell megjelennie:
Diagnosztikai naplók streamelése
Az alkalmazáskódból létrehozott konzolnaplók App Service-ben történő eléréséhez kapcsolja be a diagnosztikai naplózást a következő parancs a Cloud Shellben történő futtatásával:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
A --level
lehetséges értékei: Error
, Warning
, Info
és Verbose
. Minden szint tartalmazza az azt megelőző szintet. Például: az Error
csak a hibaüzeneteket tartalmazza, a Verbose
pedig az összes üzenetet.
Ha a diagnosztikai naplózás be van kapcsolva, futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.
Feljegyzés
A naplófájlokat a böngészőből is megtekintheti a következő címen: https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
A Ctrl
+C
billentyűparanccsal bármikor leállíthatja a naplóstreamelést.
A TODO-alkalmazás vertikális felskálázása
Az alkalmazás vertikális felskálázása egy másik feldolgozó hozzáadásával:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Az erőforrások eltávolítása
Ha ezekre az erőforrásokra már nincs szüksége más oktatóanyagokhoz (lásd a következő lépéseket), az alábbi parancs a Cloud Shellben való futtatásával törölheti azokat:
az group delete --name <your-azure-group-name> --yes
Következő lépések
Azure for Java DevelopersSpring Boot, Spring Data for Azure Cosmos DB, Azure Cosmos DB és App Service Linux.
A fejlesztői útmutatóban további információt olvashat a Java-alkalmazások Linuxon futó App Service-en való futtatásáról.
Megtudhatja, hogyan védheti meg az alkalmazást egyéni tartománnyal és tanúsítvánnyal.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: