Öğretici: Linux ve Azure Cosmos DB'de Azure Uygulaması Hizmeti ile Java Spring Boot web uygulaması oluşturma
Not
Spring uygulamaları için Azure Spring Apps kullanmanızı öneririz. Ancak, Azure Uygulaması Hizmetini hedef olarak kullanmaya devam edebilirsiniz.
Bu öğretici, Azure'da Java web uygulamaları oluşturma, yapılandırma, dağıtma ve ölçeklendirme işleminde size yol gösterir. İşiniz bittiğinde, Linux üzerinde Azure Uygulaması Hizmeti'nde çalışan Azure Cosmos DB'de veri depolayan bir Spring Boot uygulamanız olur.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Azure Cosmos DB veritabanı oluşturun.
- Veritabanına örnek bir uygulama Bağlan ve yerel olarak test edin
- Örnek uygulamayı Azure'a dağıtma
- App Service'ten tanılama günlüklerini akışla aktarma
- Örnek uygulamanın ölçeğini genişletmek için ek örnekler ekleme
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Önkoşullar
Örnek TODO uygulamasını kopyalayın ve depoyu hazırlayın
Bu öğreticide, Azure Cosmos DB için Spring Data tarafından desteklenen spring REST API'sini çağıran bir web kullanıcı arabirimine sahip örnek bir TODO liste uygulaması kullanılmaktadır. Uygulamanın kodu GitHub'da kullanılabilir. Spring ve Azure Cosmos DB kullanarak Java uygulamaları yazma hakkında daha fazla bilgi edinmek için, NoSQL için Azure Cosmos DB ile Spring Boot Starter öğreticisineve Azure Cosmos DB için Spring Data hızlı başlangıcına bakın.
Örnek depoyu kopyalamak ve örnek uygulama ortamını ayarlamak için terminalinizde aşağıdaki komutları çalıştırın.
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/* .
Azure Cosmos DB oluşturma
Aboneliğinizde bir Azure Cosmos DB veritabanı oluşturmak için bu adımları izleyin. TODO listesi uygulaması bu veritabanına bağlanır ve çalıştırılırken verilerini depolar ve uygulamayı nerede çalıştırdığınızdan bağımsız olarak uygulama durumunu kalıcı hale döndürür.
Azure CLI'nızda oturum açın ve oturum açma kimlik bilgilerinize bağlı birden fazla aboneliğiniz varsa aboneliğinizi isteğe bağlı olarak ayarlayın.
az login az account set -s <your-subscription-id>
Kaynak grubu adını not ederek bir Azure Kaynak Grubu oluşturun.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Türüyle
GlobalDocumentDB
Azure Cosmos DB oluşturun. Azure Cosmos DB örneğinin adı yalnızca küçük harf kullanmalıdır. komutundandocumentEndpoint
gelen yanıttaki alanı not edin.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Uygulamaya bağlanmak için Azure Cosmos DB anahtarınızı alın.
primaryMasterKey
sonraki adımda ihtiyacınız olacak şekilde öğesinidocumentEndpoint
yakınınızda tutun.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
TODO uygulama özelliklerini yapılandırma
Bilgisayarınızda bir terminali açın. Kopyalanan depodaki örnek betik dosyasını kopyalayarak yeni oluşturduğunuz Azure Cosmos DB veritabanı için özelleştirebilirsiniz.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Sık kullandığınız düzenleyicide düzenleyin .scripts/set-env-variables.sh
ve Azure Cosmos DB bağlantı bilgilerini sağlayın. App Service Linux yapılandırması için Azure Cosmos DB veritabanını oluştururken kullanılan önceki (your-resource-group-region
) ve kaynak grubuyla (your-azure-group-name
) aynı bölgeyi kullanın. Herhangi bir Azure dağıtımında herhangi bir web uygulaması adını çoğaltamadığından benzersiz bir WEBAPP_NAME seçin.
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>
Ardından betiği çalıştırın:
source .scripts/set-env-variables.sh
Bu ortam değişkenleri TODO liste uygulamasında kullanılır application.properties
. Özellikler dosyasındaki alanlar Spring Data için varsayılan depo yapılandırmasını ayarlar:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Ardından örnek uygulama, Azure Cosmos DB tarafından depolanacak ve yönetilecek bir varlık türü ayarlamak için 'den com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
içeri aktarılan ek açıklamayı kullanır@Document
:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Örnek uygulamayı çalıştırma
Örneği çalıştırmak için Maven kullanın.
mvn package spring-boot:run
Çıkış aşağıdaki gibi görünmelidir.
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)
Uygulama başlatıldıktan sonra bu bağlantıyı kullanarak Spring TODO Uygulamasına yerel olarak erişebilirsiniz: http://localhost:8080/
.
"TodoApplication Başlatıldı" iletisi yerine özel durumlar görürseniz, önceki adımdaki betiğin bash
ortam değişkenlerini düzgün dışarı aktarıp dışarı aktarmadığını ve değerlerin oluşturduğunuz Azure Cosmos DB veritabanı için doğru olup olmadığını denetleyin.
Azure dağıtımını yapılandırma
pom.xml
Dosyayı dizinde initial/spring-boot-todo
açın ve maven yapılandırması için aşağıdaki Azure Web App Eklentisini ekleyin.
<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>
Linux üzerinde App Service dağıtma
mvn azure-webapp:deploy
TODO uygulamasını Linux üzerinde Azure Uygulaması Hizmetine dağıtmak için Maven hedefini kullanın.
# 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] ------------------------------------------------------------------------
Çıktı, dağıtılan uygulamanızın URL'sini içerir (bu örnekte). https://spring-todo-app.azurewebsites.net
Bu URL'yi web tarayıcınıza kopyalayabilir veya uygulamanızı yüklemek için Terminal pencerenizde aşağıdaki komutu çalıştırabilirsiniz.
explorer https://spring-todo-app.azurewebsites.net
Uygulamanın adres çubuğunda uzak URL ile çalıştığını görmeniz gerekir:
Tanılama günlüklerini akışla aktarma
App Service’te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için şu komutu Cloud Shell’de çalıştırarak tanılama günlüğüne kaydetmeyi açın:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
--level
için olası değerler: Error
, Warning
, Info
ve Verbose
. Her düzey kendisinden önceki düzeyi içerir. Örneğin: Error
yalnızca hata iletilerini içerir, Verbose
ise tüm iletileri içerir.
Tanılama günlüğüne kaydetme açıldıktan sonra günlük akışını görmek için şu komutu çalıştırın:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.
Not
Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker
adresine giderek günlük dosyalarını inceleyebilirsiniz.
Günlük akışını dilediğiniz zaman durdurmak için Ctrl
+C
yazın.
TODO Uygulamasının ölçeğini genişletme
Başka bir çalışan ekleyerek uygulamanın ölçeğini genişletme:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Kaynakları temizleme
Bu kaynaklara başka bir öğretici (bkz. Sonraki adımlar) için gereksinim duymuyorsanız, Cloud Shell'de aşağıdaki komutu çalıştırarak bu kaynakları silebilirsiniz:
az group delete --name <your-azure-group-name> --yes
Sonraki adımlar
Java Geliştiricileriiçin Azure Spring Boot, Azure Cosmos DB için Spring Data, Azure Cosmos DB ve App Service Linux.
Geliştirici kılavuzunda java uygulamalarını Linux üzerinde App Service çalıştırma hakkında daha fazla bilgi edinin.
Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenin.