Wdrażanie aplikacji Spring w usłudze App Service za pomocą programu MySQL

Uwaga

W przypadku aplikacji Spring zalecamy używanie usługi Azure Spring Apps. Można jednak nadal używać usługi aplikacja systemu Azure jako miejsca docelowego. Aby uzyskać więcej informacji, zobacz Wybieranie odpowiednich usług platformy Azure dla aplikacji Java.

W tym samouczku omówimy proces kompilowania, konfigurowania, wdrażania, rozwiązywania problemów i skalowania aplikacji internetowych w języku Java w usłudze App Service dla systemu Linux.

Ten samouczek jest oparty na popularnej przykładowej aplikacji Spring PetClinic. W tym temacie przetestujesz lokalnie wersję HSQLDB aplikacji, a następnie wdrożysz ją w usłudze aplikacja systemu Azure Service. Następnie skonfigurujesz i wdrożysz wersję korzystającą z usługi Azure Database for MySQL. Na koniec dowiesz się, jak uzyskać dostęp do dzienników aplikacji i skalować w poziomie, zwiększając liczbę procesów roboczych uruchomionych w aplikacji.

Wymagania wstępne

Pobieranie przykładu

Aby rozpocząć pracę z przykładową aplikacją, sklonuj i przygotuj repozytorium źródłowe, używając poniższych poleceń.

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

Lokalne kompilowanie i uruchamianie przykładu HSQLDB

Najpierw przetestujemy przykład lokalnie przy użyciu bazy danych HSQLDB.

Skompiluj wersję bazy danych HSQLDB przykładowej aplikacji.

mvn package

Następnie ustaw zmienną środowiskową TOMCAT_HOME na lokalizację instalacji rozwiązania Tomcat.

export TOMCAT_HOME=<Tomcat install directory>

Następnie zaktualizuj plik pom.xml do wdrożenia pliku WAR. Dodaj poniższy kod XML jako element podrzędny istniejącego elementu <plugins>. W razie potrzeby zmień 1.9.11 na bieżącą wersję wtyczki 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>

Gdy konfiguracja będzie gotowa, możesz wdrożyć aplikację lokalnie w rozwiązaniu Tomcat.

mvn cargo:deploy

Następnie uruchom rozwiązanie Tomcat.

${TOMCAT_HOME}/bin/catalina.sh run

Teraz możesz przejść do witryny http://localhost:8080 w przeglądarce, aby zobaczyć uruchomioną aplikację i zorientować się, jak ona działa. Po zakończeniu wybierz klawisze Ctrl+C w wierszu polecenia powłoki Bash, aby zatrzymać program Tomcat.

Wdrażanie w usłudze Azure App Service

Teraz, gdy już wiesz, jak aplikacja działa lokalnie, wdrożymy ją na platformie Azure.

Najpierw ustaw poniższe zmienne środowiskowe. W przypadku REGIONprogramu użyj West US 2 lub innych regionów, które można znaleźć tutaj.

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

Narzędzie Maven będzie używać tych wartości do tworzenia zasobów platformy Azure z podanymi nazwami. Korzystając ze zmiennych środowiskowych, można zachować wpisy tajne konta poza plikami projektu.

Następnie zaktualizuj plik pom.xml, aby skonfigurować narzędzie Maven na potrzeby wdrożenia na platformie Azure. Po dodanym wcześniej elemencie <plugin> dodaj poniższy kod XML. W razie potrzeby zmień 2.5.0 na bieżącą wersję wtyczki Maven dla usługi 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>

Następnie zaloguj się do platformy Azure.

az login

W dalszej kolejności wdróż aplikację w usłudze App Service dla systemu Linux.

mvn azure-webapp:deploy

Teraz możesz przejść do witryny https://<app-name>.azurewebsites.net (po zastąpieniu <app-name>), aby wyświetlić uruchomioną aplikację.

Konfigurowanie usługi Azure Database for MySQL

Następnie zaczniemy korzystać z programu MySQL, zamiast z przykładu HSQLDB. Utworzymy wystąpienie serwera MySQL na platformie Azure i dodamy bazę danych, po czym zaktualizujemy konfigurację aplikacji przy użyciu nowych informacji o połączeniu z bazą danych.

Najpierw ustaw poniższe zmienne środowiskowe do użycia w dalszych czynnościach.

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=\$

Następnie utwórz i zainicjuj serwer bazy danych. Jako konfiguracji początkowej użyj polecenia az mysql up. Następnie użyj polecenia az mysql server configuration set, aby zwiększyć limit czasu połączenia i ustawić strefę czasową serwera.

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

Następnie użyj interfejsu wiersza polecenia MySQL, aby nawiązać połączenie z bazą danych na platformie Azure.

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

W wierszu polecenia interfejsu wiersza polecenia programu MySQL uruchom następujące polecenie, aby zweryfikować bazę danych o nazwie o tej samej wartości, która została określona wcześniej dla zmiennej środowiskowej MYSQL_DATABASE_NAME .

show databases;

Program MySQL jest teraz gotowy do użycia.

Konfigurowanie aplikacji dla programu MySQL

W dalszej kolejności dodamy informacje o połączeniu do wersji aplikacji dla programu MySQL, a następnie wdrożymy ją w usłudze App Service.

Zaktualizuj plik pom.xml, aby program MySQL był aktywną konfiguracją. <activation> Usuń element z profilu H2 i umieść go w profilu MySQL, jak pokazano tutaj. Pozostała część fragmentu kodu przedstawia dotychczasową konfigurację. Zwróć uwagę, jak narzędzie Maven konfiguruje dostęp do programu MySQL, używając ustawionych wcześniej zmiennych środowiskowych.

<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>

Następnie zaktualizuj plik pom.xml, aby skonfigurować narzędzie Maven na potrzeby wdrożenia na platformie Azure i użycia w programie MySQL. Po dodanym wcześniej elemencie <plugin> dodaj poniższy kod XML. W razie potrzeby zmień 2.5.0 na bieżącą wersję wtyczki Maven dla usługi 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>

Następnie skompiluj aplikację i przetestuj ją lokalnie, wdrażając ją i uruchamiając w rozwiązaniu Tomcat.

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

Teraz możesz wyświetlić aplikację lokalnie w witrynie http://localhost:8080. Aplikacja będzie wyglądać i zachowywać się tak samo jak wcześniej, ale zamiast przykładu HSQLDB będzie używała usługi Azure Database for MySQL. Po zakończeniu wybierz klawisze Ctrl+C w wierszu polecenia powłoki Bash, aby zatrzymać program Tomcat.

Na koniec wdróż aplikację w usłudze App Service.

mvn azure-webapp:deploy

Teraz możesz przejść do witryny https://<app-name>.azurewebsites.net, aby wyświetlić uruchomioną aplikację korzystającą z usług App Service i Azure Database for MySQL.

Dostęp do dzienników aplikacji

Jeśli musisz rozwiązać problemy, możesz przejrzeć dzienniki aplikacji. Aby otworzyć zdalny strumień dzienników na komputerze lokalnym, użyj poniższego polecenia.

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

Po zakończeniu przeglądania dzienników wybierz klawisze Ctrl+C, aby zatrzymać strumień.

Strumień dzienników jest również dostępny w witrynie https://<app-name>.scm.azurewebsites.net/api/logstream.

Skalowanie w poziomie

Aby obsłużyć zwiększony ruch do aplikacji, możesz przeprowadzić skalowanie w poziomie do wielu wystąpień, używając poniższego polecenia.

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

Gratulacje! Aplikacja internetowa w języku Java została skompilowana i przeskalowana przy użyciu rozwiązań Spring, JSP, Spring Data, Hibernate, JDBC, App Service dla systemu Linux i Azure Database for MySQL.

Czyszczenie zasobów

W poprzednich sekcjach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej używane w przyszłości, usuń grupę zasobów, uruchamiając poniższe polecenie.

az group delete --name ${RESOURCEGROUP_NAME}

Następne kroki

W dalszej kolejności zapoznaj się z innymi opcjami konfiguracji i ciągłej integracji/ciągłego wdrażania dostępnymi dla języka Java w usłudze App Service.