MySQL ile App Service’e Spring uygulaması dağıtma

Not

Spring uygulamaları için Azure Spring Apps kullanmanızı öneririz. Ancak, Azure Uygulaması Hizmetini hedef olarak kullanmaya devam edebilirsiniz. Daha fazla bilgi için bkz . Java uygulamalarınız için doğru Azure hizmetlerini seçme.

Bu öğretici App Service Linux’ta Java web uygulamalarını derleme, yapılandırma, dağıtma, sorun giderme ve ölçeklendirme işlemlerinden size yol gösterir.

Bu öğretici popüler Spring PetClinic örnek uygulaması üzerinde oluşturulmuştur. Bu konuda, uygulamanın HSQLDB sürümünü yerel olarak test eder ve Azure Uygulaması Hizmeti'ne dağıtırsınız. Bundan sonra, MySQL için Azure Veritabanı kullanan bir sürümü yapılandıracak ve dağıtacaksınız. Son olarak, uygulamanızı çalıştıran çalışan sayısını artırarak uygulama günlüklerine erişmeyi ve ölçeği genişletmeyi öğreneceksiniz.

Önkoşullar

Örneği alma

Örnek uygulamayla çalışmaya başlamak için aşağıdaki komutları kullanarak kaynak depoyu kopyalayın ve hazırlayın.

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

HSQLDB örneğini yerel olarak derleme ve çalıştırma

İlk olarak, veritabanı olarak HSQLDB kullanarak örneği yerel olarak test edeceğiz.

Örnek uygulamanın HSQLDB sürümünü oluşturun.

mvn package

Ardından TOMCAT_HOME ortam değişkenini Tomcat yüklemenizin konumuna ayarlayın.

export TOMCAT_HOME=<Tomcat install directory>

Ardından WAR dosyasını dağıtmak için pom.xml dosyasını güncelleştirin. Aşağıdaki XML’yi mevcut <plugins> öğesinin alt öğesi olarak ekleyin. Gerekirse, Cargo Maven 3 Eklentisinin geçerli sürümüne geçin1.9.11.

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

Bu yapılandırma gerçekleştirildikten sonra uygulamayı Tomcat’e yerel olarak dağıtabilirsiniz.

mvn cargo:deploy

Sonra Tomcat’i başlatın.

${TOMCAT_HOME}/bin/catalina.sh run

Şimdi tarayıcınızda http://localhost:8080 konumuna gidip çalışan uygulamayı görebilir ve nasıl çalıştığı hakkında fikir edinebilirsiniz. İşiniz bittiğinde, Tomcat'i durdurmak için Bash isteminde Ctrl+C tuşlarına basın.

Azure App Service’e dağıtma

Artık yerel olarak çalıştığını gördüğünüze göre, uygulamayı Azure’a dağıtacağız.

Önce aşağıdaki ortam değişkenlerini ayarlayın: için REGIONkullanın veya burada bulabileceğiniz diğer bölgeleri kullanınWest US 2.

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

Maven bu değerleri kullanarak, sizin sağladığınız adlarla Azure kaynaklarını oluşturur. Ortam değişkenlerini kullanarak hesap gizli dizilerinizi proje dosyalarınızın dışında tutabilirsiniz.

Ardından pom.xml dosyasını Azure dağıtımı için Maven’i yapılandırmak üzere güncelleştirin. Daha önce eklediğiniz <plugin> öğesinin arkasına aşağıdaki XML’yi ekleyin. Gerekirse 2.5.0 sürümünü Azure App Service için Maven Eklentisinin geçerli sürümüyle değiştirin.

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

Sonra Azure’da oturum açın.

az login

Uygulamayı App Service Linux’a dağıtın.

mvn azure-webapp:deploy

Şimdi https://<app-name>.azurewebsites.net konumuna gidip (<app-name> öğesini değiştirdikten sonra) çalışan uygulamayı görebilirsiniz.

MySQL için Azure Veritabanı’nı ayarlama

Şimdi HSQLDB yerine MySQL’i kullanmaya geçeceğiz. Azure’da bir MySQL sunucusu oluşturacak ve veritabanı ekleyeceğiz; ardından uygulama yapılandırmasını yeni veritabanı bağlantı bilgileriyle güncelleştireceğiz.

Önce sonraki adımlarda kullanmak üzere aşağıdaki ortam değişkenlerini ayarlayın:

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

Sonra veritabanı sunucusunu oluşturun ve başlatın. İlk yapılandırma için az mysql up kullanın. Sonra yapılandırma zaman aşımını artırmak ve sunucu saat dilimini ayarlamak için az mysql server configuration set kullanın.

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

Ardından MySQL CLI'yi kullanarak Azure'da veritabanınıza bağlanın.

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

MySQL CLI isteminde aşağıdaki komutu çalıştırarak adlı veritabanınızı daha önce ortam değişkeni için MYSQL_DATABASE_NAME belirttiğiniz değerle doğrulayın.

show databases;

MySQL artık kullanıma hazırdır.

Uygulamayı MySQL için yapılandırma

Bundan sonra uygulamanın MySQL sürümüne bağlantı bilgilerini ekleyecek ve bunu App Service’te dağıtacağız.

MySQL'i etkin yapılandırma yapmak için pom.xml dosyasını güncelleştirin. <activation> H2 profilinden öğesini kaldırın ve burada gösterildiği gibi bunun yerine MySQL profiline yerleştirin. Kod parçacığının kalan bölümü mevcut yapılandırmayı gösterir. Daha önce ayarlamış olduğunuz ortam değişkenlerinin, Maven tarafından MySQL erişiminizi yapılandırmak için nasıl kullanıldığına dikkat edin.

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

Ardından pom.xml dosyasını Azure dağıtımı ve MySQL kullanımı için Maven’i yapılandırmak üzere güncelleştirin. Daha önce eklediğiniz <plugin> öğesinin arkasına aşağıdaki XML’yi ekleyin. Gerekirse 2.5.0 sürümünü Azure App Service için Maven Eklentisinin geçerli sürümüyle değiştirin.

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

Sonra uygulamayı derleyin ve Tomcat’le dağıtıp çalıştırarak yerel olarak test edin.

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

Artık uygulamayı http://localhost:8080 konumunda yerel olarak görüntüleyebilirsiniz. Uygulama önceki gibi görünecek ve davranacak ama HSQLDB yerine MySQL için Azure Veritabanı’nı kullanacaktır. İşiniz bittiğinde, Tomcat'i durdurmak için Bash isteminde Ctrl+C tuşlarına basın.

Son olarak uygulamayı App Service’e dağıtın.

mvn azure-webapp:deploy

https://<app-name>.azurewebsites.net konumuna gidip App Service ve MySQL için Azure Veritabanı kullanarak çalışan uygulamayı görebilirsiniz.

Uygulama günlüklerine erişme

Sorunları gidermeniz gerekiyorsa uygulama günlüklerine bakabilirsiniz. Yerel makinenizde uzak günlük akışını açmak için aşağıdaki komutu kullanın.

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

Günlükleri görüntülemeyi bitirdiğinizde akışı durdurmak için Ctrl+C tuşlarına basın.

Günlük akışı https://<app-name>.scm.azurewebsites.net/api/logstream konumunda da bulunabilir.

Ölçeği genişletme

Uygulamanızın artan trafiğini desteklemek için aşağıdaki komutu kullanarak ölçeği birden çok örneğe genişletebilirsiniz.

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

Tebrikler! Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux ve MySQL için Azure Veritabanı kullanarak bir Java Web uygulaması derlediğiniz ve bu uygulamanın ölçeğini genişlettiniz.

Kaynakları temizleme

Önceki bölümlerde bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakları gelecekte kullanacağınızı düşünmüyorsanız, aşağıdaki komutu çalıştırarak kaynak grubunu silin.

az group delete --name ${RESOURCEGROUP_NAME}

Sonraki adımlar

Sonra App Service ile Java için sağlanan diğer yapılandırma ve CI/CD seçeneklerini gözden geçirin.