Руководство. Использование динамической конфигурации с принудительным обновлением в приложении Java Spring
Клиентская библиотека Java Spring для Конфигурации приложений поддерживает обновление конфигурации по запросу без перезапуска приложения. Приложение можно настроить для обнаружения изменений в Конфигурации приложений с помощью одного из описанных ниже подходов или их обоих.
Модель опроса: это поведение по умолчанию, которое использует опрос для обнаружения изменений в конфигурации. Когда истекает срок действия кэшированного значения параметра, при следующем вызове
AppConfigurationRefresh
на сервер отправляется запросrefreshConfigurations
, чтобы проверить, изменилась ли конфигурация. В таком случае извлекается обновленная конфигурация.Модель отправки: это использует события Конфигурация приложений для обнаружения изменений в конфигурации. Когда в Конфигурации приложений будет настроена отправка событий изменения значения ключа в Сетку событий через веб-перехватчик, с помощью этих событий приложение сможет оптимизировать общее число запросов, требуемых для обновления конфигурации.
Из этого руководства вы узнаете, как реализовать динамические обновления конфигурации в коде путем обновления в режиме отправки. При этом в качестве основы используется код приложения, представленный в кратких руководствах. Прежде чем продолжить, выполните краткое руководство Создание приложения Java Spring с помощью Конфигурации приложений Azure.
Вы можете выполнять шаги в этом учебнике с помощью любого редактора кода. Visual Studio Code является отличным вариантом, который доступен на платформах Windows, macOS и Linux.
В этом руководстве описано следующее:
- настройка подписки на отправку событий изменения конфигурации из Конфигурации приложений в веб-перехватчик;
- развертывание приложения Spring Boot в службе приложений;
- настройка обновления конфигурации в приложении Java Spring при изменении данных в Конфигурации приложений;
- использование последней конфигурации в приложении.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Поддерживаемый комплект разработчика Java (JDK) версии 11.
- Apache Maven версии 3.0 или более поздней.
- Существующее хранилище Конфигурации приложений Azure.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Настройка принудительного обновления
Откройте файл pom.xml и обновите его, добавив следующие зависимости.
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId> </dependency> <!-- Adds the Ability to Push Refresh --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.8.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Настройте развертывание Maven для Службы приложений, чтобы приложение можно было развернуть в Службе приложений Azure через Maven.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
Откройте bootstrap.properties и настройте Конфигурация приложений Azure Push Refresh.
# Azure App Configuration Properties spring.cloud.azure.appconfiguration.stores[0].connection-string= ${AppConfigurationConnectionString} spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled= true spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30d spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key= sentinel spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name= myToken spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret= myTokenSecret management.endpoints.web.exposure.include= appconfiguration-refresh
Чтобы снизить влияние возможного регулирования, перед объявлением кэшированного значения "грязным" (устаревшим) выполняется задержка случайной длительности. По умолчанию максимально допустимое значение такой задержки составляет 30 секунд.
Примечание.
Имя основного маркера должно храниться в конфигурации приложения в виде ключа, а секрет основного маркера — в формате ссылки на Key Vault для Конфигурации приложений, чтобы повысить уровень безопасности.
Создание и запуск приложения в службе приложений
Для веб-перехватчиков Сетки событий требуется проверка при создании. Вы можете выполнить такую проверку, выполнив инструкции в этом руководстве или запустив приложение с уже настроенной веб-библиотекой Spring для Конфигурации приложений Azure, которая автоматически зарегистрирует приложение. Чтобы использовать подписку на события, выполните действия, описанные в следующих двух разделах.
Создайте переменную среды для строки подключения к экземпляре Конфигурации приложений:
setx AppConfigurationConnectionString <connection-string-of-your-app-configuration-store>
Обновление
pom.xml
в разделе добавленияconfiguration
azure-webapp-maven-plugin
<appSettings> <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString> </appSettings>
Чтобы создать консольное приложение, выполните следующую команду:
mvn package
Когда создание завершится, запустите приложение локально с помощью следующей команды:
mvn azure-webapp:deploy
Настройка подписки на событие
Откройте ресурс Конфигурации приложений на портале Azure, а затем щелкните
+ Event Subscription
в областиEvents
.Введите имена для
Event Subscription
иSystem Topic
. По умолчанию задаются типы событий изменения и удаления пары "ключ — значение", но это можно изменить или на вкладке "Фильтры" выбрать точные причины для отправки события push-уведомления.Выберите для параметра
Endpoint Type
значениеWeb Hook
, а затем выберитеSelect an endpoint
.Конечная точка составляется из URI приложения и строки /actuator/appconfiguration-refresh?{имя_маркера}={секрет_маркера}. Например так:
https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret
Щелкните
Create
, чтобы добавить подписку на событие. Если выбрано значениеCreate
, приложению будет отправлен запрос на регистрацию веб-перехватчика. Клиентская библиотека Конфигурации приложений Azure принимает этот запрос, проверяет его и возвращает допустимый ответ.Нажмите
Event Subscriptions
в областиEvents
, чтобы проверить, создана ли подписка.
Примечание.
При подписке на изменения конфигурации можно использовать один или несколько фильтров. Они позволяют сократить число событий, отправляемых в приложение. Их можно настроить в качестве фильтров подписок Сетки событий. Например, с помощью фильтра можно подписаться только на события изменений в ключе, который начинается с определенной строки.
Примечание.
Если у вас несколько экземпляров запущенного приложения, можно использовать appconfiguration-refresh-bus
конечную точку, требующую настройки Служебная шина Azure, которая используется для отправки сообщения всем экземплярам приложения для обновления конфигурации. Это полезно, если у вас есть несколько экземпляров запущенного приложения и необходимо убедиться, что все экземпляры обновляются с помощью последней конфигурации. Эта конечная точка недоступна, если она spring-cloud-bus
не настроена как зависимость. Дополнительные сведения см. в документации по Служебная шина Azure Spring Cloud Bus. Необходимо настроить только подключение служебной шины, и библиотека Конфигурация приложений Azure будет обрабатывать отправку и получение сообщений.
Проверка и тестирование приложения
После запуска приложение можно протестировать с помощью средства curl, например:
curl -X GET https://my-azure-webapp.azurewebsites.net
Откройте портал Azure и перейдите к ресурсу Конфигурации приложений, который связан с вашим приложением. Выберите Обозреватель конфигураций в разделе Операции и измените значения указанных ниже ключей:
Ключ Значение application/config.message Hello - Updated Обновите страницу браузера, чтобы просмотреть новое отображаемое сообщение.
Очистка ресурсов
Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.
Важно!
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.
- Войдите на портал Azure и выберитеГруппы ресурсов.
- Введите имя группы ресурсов в поле Фильтровать по имени.
- В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
- Выберите команду Удалить группу ресурсов.
- Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.
Через некоторое время группа ресурсов и все ее ресурсы будут удалены.
Следующие шаги
В этом руководстве показано, как настроить в приложении Java динамическое обновление параметров конфигурации из Конфигурации приложений. Если возникнут дополнительные вопросы, см. справочную документацию, в ней подробно описан принцип работы библиотеки Spring Cloud для Конфигурации приложений Azure. Чтобы узнать, как с помощью удостоверения, управляемого Azure, упростить доступ к службе "Конфигурация приложений Azure", перейдите к следующему учебнику.