kurz: vytvoření webové aplikace Java jarní Boot pomocí Azure App Service v systému Linux a Azure Cosmos DB

Tento kurz vás provede procesem sestavení, konfigurace, nasazení a škálování webových aplikací v jazyce Java v Azure. až budete hotovi, budete mít aplikaci pro spouštění pružiny , která ukládá data v Azure Cosmos DB spuštěná na Azure App Service v systému Linux.

aplikace pro spouštění pružiny, která ukládá data do Azure Cosmos DB

V tomto kurzu se naučíte:

  • vytvořte databázi Cosmos DB.
  • Připojení ukázkové aplikace do databáze a lokálně ji testujte
  • Nasazení ukázkové aplikace do Azure
  • Streamování diagnostických protokolů z 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 před tím, než začnete.

Požadavky

Naklonování ukázkové aplikace TODO a příprava úložiště

v tomto kurzu se používá ukázková aplikace seznamu úkolů s webovým uživatelským rozhraním, které volá pružinovou REST APIovou Azure Cosmos DBovou datovou pružinu. Kód aplikace je k dispozici na GitHub. další informace o psaní aplikací v jazyce Java pomocí pružiny a Cosmos DB najdete v kurzu o jaře Boot start v kurzu Azure Cosmos DB SQL API a na jarních datech Azure Cosmos DB rychlém startu.

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

pomocí těchto kroků vytvořte v předplatném Azure Cosmos DBovou databázi. Aplikace seznamu úkolů se připojí k této databázi a uloží její data při spuštění a zůstane beze stavu aplikace bez ohledu na to, kde aplikaci spustíte.

  1. Přihlaste se k rozhraní příkazového řádku Azure a volitelně můžete nastavit 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>
    
  2. 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>
    
  3. vytvořte Azure Cosmos DB s GlobalDocumentDB typem. název Cosmos DB musí obsahovat jenom malá písmena. Poznamenejte si documentEndpoint 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>
    
  4. získejte Azure Cosmos DB klíč pro připojení k aplikaci. primaryMasterKey documentEndpoint V dalším kroku nechte v nejbližším případě, že je budete potřebovat.

    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 do klonovaného úložiště, abyste ho mohli přizpůsobit vaší Cosmos DB databázi, 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 Azure Cosmos DB připojení. pro konfiguraci App Service Linux použijte stejnou oblast jako předtím ( your-resource-group-region ) a skupinu prostředků (), která se your-azure-group-name používá při vytváření databáze Cosmos DB. Vyberte 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>

Potom spusťte skript:

source .scripts/set-env-variables.sh

Tyto proměnné prostředí se používají v application.properties aplikaci seznam todo. Pole v souboru s vlastnostmi nastavily výchozí konfiguraci úložiště pro data pružiny:

azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}

ukázková aplikace potom používá @Document anotaci importovanou z nástroje com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document k nastavení typu entity, který chcete uložit a spravovat pomocí 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í Maven spusťte ukázku.

mvn package spring-boot:run

Výstup by měl vypadat nějak takto.

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)

Po spuštění aplikace můžete přístup k aplikaci pružiny použít místně pomocí tohoto odkazu: http://localhost:8080/ .

Přístup k aplikaci jarní TODO místně

pokud se zobrazí výjimky místo zprávy "spuštění TodoApplication", zkontrolujte, zda bash skript v předchozím kroku exportovali proměnné prostředí správně a zda jsou hodnoty správné pro Azure Cosmos DB databázi, kterou jste vytvořili.

Konfigurace nasazení Azure

Otevřete pom.xml soubor v initial/spring-boot-todo adresáři a přidejte následující modul plug-in webové aplikace Azure pro konfiguraci Maven .

<plugins> 

    <!--*************************************************-->
    <!-- Deploy to Java SE in App Service Linux           -->
    <!--*************************************************-->
       
    <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>2.0.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í na App Service v systému Linux

Použijte mvn azure-webapp:deploy cíl Maven k nasazení aplikace TODO pro Azure App Service v systému 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.0.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 vaší 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 svou aplikaci.

explorer https://spring-todo-app.azurewebsites.net

Na adresním řádku by se měla zobrazit aplikace spuštěná se vzdálenou adresou URL:

Aplikace pružinového spuštění běžící se vzdálenou adresou URL

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 pro vývojáře v jazyce Java jarní spouštění, pružinová Data pro Cosmos DB, Azure Cosmos DB a App Service Linux.

Přečtěte si další informace o spouštění aplikací Java v App Service v systému Linux v příručce pro vývojáře.