Руководство. Создание веб-приложения Java Spring Boot с помощью службы приложение Azure в Linux и Azure Cosmos DB
Примечание.
Для приложений Spring рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать службу приложение Azure в качестве назначения. Рекомендации по назначению рабочей нагрузки Java см. в руководстве по назначению рабочей нагрузки Java.
В данном руководстве описывается процесс создания, настройки, развертывания и масштабирования веб-приложений Java в Azure. Когда вы выполните инструкции руководства, у вас будет приложение Spring Boot, данные которого хранятся в Azure Cosmos DB, которая работает в Службе приложений Azure на Linux.
В этом руководстве описано следующее:
- Создает базу данных Azure Cosmos DB.
- Подключение примера приложения к базе данных и его локальное тестирование
- Развертывание примера приложения в Azure
- Потоковая передача журналов диагностики из службы приложений
- Добавление дополнительных экземпляров для горизонтального увеличения масштаба примера приложения
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Необходимые компоненты
Клонирование примера приложения со списком задач и подготовка репозитория
В этом руководстве используется пример приложения списка TODO с веб-интерфейсом, который вызывает REST API Spring, поддерживаемый Spring Data для Azure Cosmos DB. Код для приложения можно найти на сайте GitHub. Дополнительные сведения о написании приложений Java с помощью Spring и Azure Cosmos DB см . в кратком руководстве по Azure Cosmos DB для NoSQL и кратком руководстве по Spring Data для Azure Cosmos DB.
Выполните следующие команды в терминале, чтобы клонировать репозиторий и настроить среду примера приложения.
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
Чтобы создать базу данных Azure Cosmos DB в подписке, выполните следующие действия. Приложение списка задач подключится к этой базе данных и сохранит данные при запуске, сохраняя состояние приложения независимо от того, где вы его запускаете.
Войдите в Azure CLI и при необходимости укажите подписку, если у вас есть несколько подписок подключены к учетным данным для входа.
az login az account set -s <your-subscription-id>
Создайте группу ресурсов Azure, указав ее имя.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Создайте Azure Cosmos DB с видом
GlobalDocumentDB
. Имя экземпляра Azure Cosmos DB должно использовать только строчные буквы. Запишите полеdocumentEndpoint
в ответе от команды.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Получите ключ Azure Cosmos DB, чтобы подключиться к приложению. Сохраните
primaryMasterKey
иdocumentEndpoint
поблизости, так как они потребуются на следующем шаге.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Настройка свойств приложения со списком задач
Откройте терминал на своем компьютере. Скопируйте пример файла скрипта в клонируемом репозитории, чтобы можно было настроить его для только что созданной базы данных Azure Cosmos DB.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Измените .scripts/set-env-variables.sh
в избранном редакторе и укажите сведения о подключении Azure Cosmos DB. Для конфигурации Служба приложений Linux используйте тот же регион, что и ранее (your-resource-group-region
) и группу ресурсов (your-azure-group-name
), используемую при создании базы данных Azure Cosmos DB. Выберите уникальное имя WEBAPP_NAME, так как оно не должно совпадать с любым именем веб-приложения в любом развертывании 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>
Затем выполните скрипт:
source .scripts/set-env-variables.sh
Эти переменные среды используются в application.properties
в приложении со списком задач. Поля в файле свойств задают конфигурацию репозиторию по умолчанию для Spring Data:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Затем пример приложения использует заметку @Document
, импортированную из com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
, чтобы настроить тип сущности для хранения и управления ими с помощью Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Запуск примера приложения
Используйте Maven, чтобы запустить пример.
mvn package spring-boot:run
Полученный результат должен выглядеть примерно так:
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)
После запуска приложения Spring со списком задач к нему можно получить доступ локально с помощью этой ссылки: http://localhost:8080/
.
Если вместо сообщения "Приложение со списком задач запущено" отображаются исключения, убедитесь, что скрипт bash
на предыдущем шаге правильно экспортировал переменные среды и что значения для созданной базы данных Azure Cosmos DB верны.
Настройка развертывания в Azure
Откройте файл pom.xml
в каталоге initial/spring-boot-todo
и добавьте конфигурацию подключаемого модуля веб-приложения Azure для Maven.
<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>
Развертывание в cлужбу приложений на платформе Linux
Используйте целевой объект Maven mvn azure-webapp:deploy
, чтобы развернуть приложение со списком задач в Службу приложений Azure на платформе 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.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] ------------------------------------------------------------------------
Выходные данные содержат URL-адрес развернутого приложения (в этом примере — https://spring-todo-app.azurewebsites.net
). Этот URL-адрес можно скопировать в веб-браузер или выполнить следующую команду в окне терминала, чтобы загрузить приложение.
explorer https://spring-todo-app.azurewebsites.net
Вы должны увидеть приложение, которое выполняется с удаленным URL-адресом, в адресной строке:
Потоковая передача журналов диагностики
Чтобы получить доступ к журналам консоли, созданным в коде приложения в Службе приложений, включите ведение журнала диагностики, выполнив следующую команду в Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Возможные значения для --level
: Error
, Warning
, Info
и Verbose
. Каждый последующий уровень включает предыдущий уровень. Например: Error
включает только сообщения об ошибках, а Verbose
включает все сообщения.
Включив ведение журнала диагностики, выполните следующую команду, чтобы просмотреть поток данных журнала:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.
Примечание.
Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Чтобы остановить потоковую передачу журналов, нажмите клавиши Ctrl
+C
.
Горизонтальное увеличение масштаба приложения со списком задач
Выполните горизонтальное увеличение масштаба приложения, добавив другую рабочую роль:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Очистка ресурсов
Если эти ресурсы не требуются для изучения другого руководства (см. раздел Дальнейшие действия), их можно удалить, выполнив следующие команды в Cloud Shell:
az group delete --name <your-azure-group-name> --yes
Следующие шаги
Azure для разработчиковJava Spring Boot, Spring Data для Azure Cosmos DB, Azure Cosmos DB и Служба приложений Linux.
Дополнительные сведения о запуске приложений Java в Службе приложений Azure в Linux см. в статье
Узнайте, как защитить приложение с помощью личного домена и сертификата.