Kurz: Vytvoření webové aplikace Java Spring Boot se službou Aplikace Azure Service v Linuxu a Azure Cosmos DB
Poznámka:
Pro aplikace Spring doporučujeme používat Azure Spring Apps. Službu Aplikace Azure však můžete použít jako cíl. Rady najdete v pokynech k cíli úloh v Javě.
Tento kurz vás provede procesem sestavování, konfigurace, nasazování a škálování webových aplikací v Javě v Azure. Po dokončení budete mít aplikaci Spring Boot, která ukládá data ve službě Azure Cosmos DB ve službě Aplikace Azure Service v Linuxu.
V tomto kurzu se naučíte:
- Vytvoří účet databáze Azure Cosmos DB.
- Připojení ukázkovou aplikaci do databáze a místně ji otestujte.
- Nasazení ukázkové aplikace do Azure
- Streamování diagnostických protokolů ze služby App Service
- Přidání dalších instancí pro horizontální navýšení kapacity ukázkové aplikace
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Požadavky
Naklonujte ukázkovou aplikaci TODO a připravte úložiště.
V tomto kurzu se používá ukázková aplikace seznamu úkolů s webovým uživatelským rozhraním, které volá rozhraní Spring REST API využívající Spring Data pro Službu Azure Cosmos DB. Kód aplikace je k dispozici na GitHubu. Další informace o psaní aplikací v Javě pomocí Spring a Azure Cosmos DB najdete v úvodním kurzu Spring Boot s kurzem Azure Cosmos DB for NoSQL a rychlým startem Spring Data for Azure Cosmos DB.
Spuštěním následujících příkazů v terminálu naklonujte ukázkové úložiště a nastavte prostředí ukázkové aplikace.
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/* .
Vytvoření služby Azure Cosmos DB
Podle těchto kroků vytvořte ve svém předplatném databázi Azure Cosmos DB. Aplikace seznamu úkolů se připojí k této databázi a při spuštění uloží její data a zachová stav aplikace bez ohledu na to, kde aplikaci spustíte.
Přihlaste se k Azure CLI a volitelně nastavte své předplatné, pokud máte více než jedno připojené k přihlašovacím údajům.
az login az account set -s <your-subscription-id>
Vytvořte skupinu prostředků Azure, která označuje název skupiny prostředků.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Vytvořte službu Azure Cosmos DB s typem
GlobalDocumentDB
. Název instance služby Azure Cosmos DB musí používat pouze malá písmena. Poznamenejte sidocumentEndpoint
pole v odpovědi z příkazu.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Získejte klíč služby Azure Cosmos DB pro připojení k aplikaci. Ponechte ho
primaryMasterKey
documentEndpoint
v blízkosti, protože je budete potřebovat v dalším kroku.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Konfigurace vlastností aplikace TODO
Na počítači si otevřete terminál. Zkopírujte ukázkový soubor skriptu v naklonovaném úložišti, abyste ho mohli přizpůsobit pro databázi Azure Cosmos DB, kterou jste právě vytvořili.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Upravte .scripts/set-env-variables.sh
v oblíbeném editoru a zadejte informace o připojení ke službě Azure Cosmos DB. Pro konfiguraci služby App Service Linux použijte stejnou oblast jako předtím (your-resource-group-region
) a skupinu prostředků (your-azure-group-name
) použitou při vytváření databáze Azure Cosmos DB. Zvolte WEBAPP_NAME, která je jedinečná, protože nemůže duplikovat žádný název webové aplikace v žádném nasazení Azure.
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>
Pak spusťte skript:
source .scripts/set-env-variables.sh
Tyto proměnné prostředí se používají v application.properties
aplikaci seznamu úkolů. Pole v souboru vlastností nastavila výchozí konfiguraci úložiště pro 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> {
}
Pak ukázková aplikace použije poznámku @Document
importovanou z com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
k nastavení typu entity, který se má uložit a spravovat službou Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Spuštění ukázkové aplikace
Pomocí Mavenu spusťte ukázku.
mvn package spring-boot:run
Výstup by měl vypadat následovně.
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)
Aplikaci Spring TODO můžete otevřít místně pomocí tohoto odkazu po spuštění aplikace: http://localhost:8080/
.
Pokud se místo zprávy Started TodoApplication zobrazí výjimky, zkontrolujte, jestli bash
skript v předchozím kroku správně exportoval proměnné prostředí a že jsou správné hodnoty pro databázi Azure Cosmos DB, kterou jste vytvořili.
Konfigurace nasazení Azure
pom.xml
Otevřete soubor v initial/spring-boot-todo
adresáři a přidejte následující konfiguraci modulu plug-in webové aplikace Azure pro Maven.
<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>
Nasazení do App Service v Linuxu
mvn azure-webapp:deploy
Pomocí cíle Maven nasaďte aplikaci TODO do služby Aplikace Azure Service v Linuxu.
# 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] ------------------------------------------------------------------------
Výstup obsahuje adresu URL nasazené aplikace (v tomto příkladu https://spring-todo-app.azurewebsites.net
). Tuto adresu URL můžete zkopírovat do webového prohlížeče nebo spuštěním následujícího příkazu v okně terminálu načíst aplikaci.
explorer https://spring-todo-app.azurewebsites.net
Měla by se zobrazit aplikace spuštěná se vzdálenou adresou URL na panelu Adresa:
Streamování diagnostických protokolů
Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Možné hodnoty pro --level
jsou: Error
, Warning
, Info
a Verbose
. Každá další úroveň zahrnuje předchozí úroveň. Například Error
zahrnuje jenom chybové zprávy a Verbose
zahrnuje všechny zprávy.
Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.
Poznámka:
Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Streamování protokolů můžete kdykoli zastavit zadáním Ctrl
+C
.
Horizontální navýšení kapacity aplikace TODO
Horizontální navýšení kapacity aplikace přidáním dalšího pracovního procesu:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Vyčištění prostředků
Pokud tyto prostředky nepotřebujete pro další kurz (viz Další kroky), můžete je odstranit spuštěním následujícího příkazu ve službě Cloud Shell:
az group delete --name <your-azure-group-name> --yes
Další kroky
Azure for Java DevelopersSpring Boot, Spring Data for Azure Cosmos DB, Azure Cosmos DB a App Service Linux.
Přečtěte si další informace o spouštění aplikací v Javě na App Service v Linuxu v příručce pro vývojáře.
Zjistěte, jak zabezpečit aplikaci pomocí vlastní domény a certifikátu.