Nasazení aplikace Spring do služby App Service pomocí MySQL

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. Další informace najdete v tématu Volba správných služeb Azure pro vaše aplikace v Javě.

Tento kurz vás provede sestavením, konfigurací, nasazením, řešením problémů a škálováním webových aplikací v jazyce Java ve službě App Service využívající Linux.

Základem tohoto kurzu je populární ukázková aplikace Spring s názvem PetClinic. V tomto tématu otestujete verzi HSQLDB aplikace místně a pak ji nasadíte do služby Aplikace Azure Service. Potom nakonfigurujete a nasadíte verzi, která používá Azure Database for MySQL. Nakonec se dozvíte, jak získat přístup k protokolům aplikace a horizontální navýšením kapacity tím, že zvýšíte počet pracovních procesů, na kterých běží vaše aplikace.

Požadavky

Získání ukázky

Pokud chcete začít s ukázkovou aplikací, pomocí následujících příkazů naklonujte a připravte zdrojové úložiště.

git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
cd spring-framework-petclinic

Místní sestavení a spuštění ukázky HSQLDB

Nejprve ukázku otestujeme místně pomocí HSQLDB jako databáze.

Sestavte verzi HSQLDB ukázkové aplikace.

mvn package

Dále nastavte proměnnou prostředí TOMCAT_HOME na umístění vaší instalace Tomcat.

export TOMCAT_HOME=<Tomcat install directory>

Potom aktualizujte pom.xml soubor pro nasazení souboru WAR. Přidejte následující kód XML tak, aby byl podřízený existujícímu elementu <plugins>. V případě potřeby přejděte 1.9.11 na aktuální verzi modulu plug-in Cargo Maven 3.

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven3-plugin</artifactId>
    <version>1.9.11</version>
    <configuration>
        <container>
            <containerId>tomcat9x</containerId>
            <type>installed</type>
            <home>${TOMCAT_HOME}</home>
        </container>
        <configuration>
            <type>existing</type>
            <home>${TOMCAT_HOME}</home>
        </configuration>
        <deployables>
            <deployable>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <type>war</type>
                <properties>
                    <context>/</context>
                </properties>
            </deployable>
        </deployables>
    </configuration>
</plugin>

S touto konfigurací můžete aplikaci nasadit místně do služby Tomcat.

mvn cargo:deploy

Pak spusťte Tomcat.

${TOMCAT_HOME}/bin/catalina.sh run

V prohlížeči teď můžete přechodem na adresu http://localhost:8080 zobrazit spuštěnou aplikaci a zjistit, jak funguje. Až budete hotovi, vyberte Ctrl+C na příkazovém řádku Bash a zastavte Tomcat.

Nasazení do Azure App Service

Teď, když jste aplikaci viděli běžet místně, ji nasadíme do Azure.

Nejprve nastavte následující proměnné prostředí. Pro REGION, použití West US 2 nebo jiné oblasti najdete zde.

export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>

Maven tyto hodnoty použije k vytvoření prostředků Azure s názvy, které zadáte. S využitím proměnných prostředí můžete tajné kódy účtu uchovávat mimo soubory projektu.

Pak úpravou souboru pom.xml nakonfigurujte Maven pro nasazení Azure. Za dříve přidaný element <plugin> přidejte následující kód XML. V případě potřeby změňte 2.5.0 na aktuální verzi modulu plug-in Maven pro Azure App Service.

<plugin>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-webapp-maven-plugin</artifactId>
  <version>2.5.0</version>
  <configuration>
    <schemaVersion>v2</schemaVersion>
    <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
    <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
    <appName>${WEBAPP_NAME}</appName>
    <region>${REGION}</region>
    <pricingTier>P1v2</pricingTier>
    <runtime>
      <os>Linux</os>
      <javaVersion>Java 8</javaVersion>
      <webContainer>TOMCAT 9.0</webContainer>
    </runtime>
    <deployment>
      <resources>
        <resource>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.war</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin>

Dále se přihlaste k Azure.

az login

Pak aplikaci nasaďte do služby App Service využívající Linux.

mvn azure-webapp:deploy

Pokud chcete vidět spuštěnou aplikaci, můžete (po nahrazení <app-name>) přejít na adresu https://<app-name>.azurewebsites.net.

Nastavení služby Azure Database for MySQL

V dalším kroku přepneme z HSQLDB na MySQL. V Azure vytvoříme instanci serveru MySQL a přidáme databázi a následně aktualizujeme konfiguraci aplikace novými informacemi o připojení k databázi.

Nejprve nastavte následující proměnné prostředí, které se budou používat v dalších krocích.

export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$

Pak vytvořte a inicializujte databázový server. K počáteční konfiguraci použijte příkaz az mysql up. Příkazem az mysql server configuration set prodlužte časový limit připojení a nastavte časové pásmo serveru.

az extension add --name db-up

az mysql up \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server-name ${MYSQL_SERVER_NAME} \
    --database-name ${MYSQL_DATABASE_NAME} \
    --admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
    --admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}

az mysql server configuration set --name wait_timeout \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value 2147483

az mysql server configuration set --name time_zone \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value=-8:00

Pak se pomocí rozhraní příkazového řádku MySQL připojte k databázi v Azure.

mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME}@${MYSQL_SERVER_NAME} \
 -h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p

Na příkazovém řádku MySQL spusťte následující příkaz, který ověří vaši databázi s názvem se stejnou hodnotou, kterou jste zadali dříve pro proměnnou MYSQL_DATABASE_NAME prostředí.

show databases;

MySQL je teď připraveno k použití.

Konfigurace aplikace pro MySQL

Dále přidáme informace o připojení k verzi MySQL aplikace a pak ji nasadíme do služby App Service.

Aktualizujte soubor pom.xml tak, aby byl MySQL aktivní konfigurací. <activation> Odeberte prvek z profilu H2 a místo toho ho vložte do profilu MySQL, jak je znázorněno zde. Zbytek tohoto fragmentu kódu ukazuje existující konfiguraci. Všimněte si, jak Maven používá ke konfiguraci přístupu k MySQL dříve nastavené proměnné prostředí.

<profile>
    <id>MySQL</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <db.script>mysql</db.script>
        <jpa.database>MYSQL</jpa.database>
        <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
        <jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
        <jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}@${DOLLAR}{MYSQL_SERVER_FULL_NAME}</jdbc.username>
        <jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
    </properties>
    ...
</profile>

Pak úpravou souboru pom.xml nakonfigurujte Maven pro nasazení Azure a použití MySQL. Za dříve přidaný element <plugin> přidejte následující kód XML. V případě potřeby změňte 2.5.0 na aktuální verzi modulu plug-in Maven pro Azure App Service.

<plugin>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-webapp-maven-plugin</artifactId>
  <version>2.5.0</version>
  <configuration>
    <schemaVersion>v2</schemaVersion>
    <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
    <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
    <appName>${WEBAPP_NAME}</appName>
    <region>${REGION}</region>
    <pricingTier>P1v2</pricingTier>
    <runtime>
      <os>Linux</os>
      <javaVersion>Java 8</javaVersion>
      <webContainer>TOMCAT 9.0</webContainer>
    </runtime>
    <appSettings>
      <property>
        <name>MYSQL_SERVER_FULL_NAME</name>
        <value>${MYSQL_SERVER_FULL_NAME}</value>
      </property>
      <property>
        <name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
        <value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
      </property>
      <property>
        <name>MYSQL_SERVER_ADMIN_PASSWORD</name>
        <value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
      </property>
      <property>
        <name>MYSQL_DATABASE_NAME</name>
        <value>${MYSQL_DATABASE_NAME}</value>
      </property>
    </appSettings>
    <deployment>
      <resources>
        <resource>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.war</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin>

Dále sestavte aplikaci a nasazením a spuštěním pomocí služby Tomcat ji místně otestujte.

mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run

Aplikaci si teď můžete místně prohlédnout na adrese http://localhost:8080. Vzhled a chování aplikace bude stejné jako předtím, ale místo HSQLDB se bude používat Azure Database for MySQL. Až budete hotovi, vyberte Ctrl+C na příkazovém řádku Bash a zastavte Tomcat.

Nakonec aplikaci nasaďte do služby App Service.

mvn azure-webapp:deploy

Přechodem na adresu https://<app-name>.azurewebsites.net teď můžete zobrazit spuštěnou aplikaci, která používá App Service a Azure Database for MySQL.

Přístup k protokolům aplikace

Pokud potřebujete řešit problémy, můžete se podívat do protokolů aplikace. K otevření vzdáleného streamu protokolu na místním počítači použijte následující příkaz.

az webapp log tail --name ${WEBAPP_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

Až budete hotovi se zobrazením protokolů, zastavíte stream stisknutím kombinace kláves Ctrl+C.

Stream protokolu je dostupný také na adrese https://<app-name>.scm.azurewebsites.net/api/logstream.

Horizontální navýšení kapacity

Zvýšený provoz směřující do aplikace můžete zvládnout horizontálním rozšířením kapacity pomocí následujícího příkazu.

az appservice plan update --number-of-workers 2 \
    --name ${WEBAPP_PLAN_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

Gratulujeme! Pomocí produktů Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service využívající Linux a Azure Database for MySQL jste sestavili webovou aplikaci v jazyce Java a horizontálně rozšířili její kapacitu.

Vyčištění prostředků

V předchozích částech jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete používat, spuštěním následujícího příkazu tuto skupinu prostředků odstraňte.

az group delete --name ${RESOURCEGROUP_NAME}

Další kroky

Podívejte se na další možnosti konfigurace a CI/CD dostupné pro jazyk Java se službou App Service.