Руководство. Использование динамической конфигурации с принудительным обновлением в приложении 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.18.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
Перейдите
resources
в каталог приложения и откройтеbootstrap.properties
и настройте Конфигурация приложений Azure Push Refresh. Если такой файл не существует, создайте его. Добавьте следующую строку в файл.Вы используете
DefaultAzureCredential
для проверки подлинности в хранилище Конфигурация приложений. Следуйте инструкциям, чтобы назначить учетные данные роли чтения данных Конфигурация приложений. Перед запуском приложения обязательно предоставьте достаточно времени для распространения разрешения. Создайте файл с именем AppConfigCredential.java и добавьте следующие строки:spring.cloud.azure.appconfiguration.stores[0].endpoint= ${APP_CONFIGURATION_ENDPOINT} 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
Кроме того, необходимо добавить следующий код в проект, если вы не хотите использовать управляемое удостоверение:
import org.springframework.stereotype.Component; import com.azure.data.appconfiguration.ConfigurationClientBuilder; import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.spring.cloud.appconfiguration.config.ConfigurationClientCustomizer; @Component public class AppConfigCredential implements ConfigurationClientCustomizer { @Override public void customize(ConfigurationClientBuilder builder, String endpoint) { builder.credential(new DefaultAzureCredentialBuilder().build()); } }
Добавьте конфигурацию начальной загрузки конфигурации, создав
spring.factories
файл вresources/META-INF
каталоге и добавьте следующие строки и обновите имяcom.example.MyApplication
приложения и пакет:org.springframework.cloud.bootstrap.BootstrapConfiguration=\ com.example.MyApplication
Чтобы снизить влияние возможного регулирования, перед объявлением кэшированного значения "грязным" (устаревшим) выполняется задержка случайной длительности. По умолчанию максимально допустимое значение такой задержки составляет 30 секунд.
Примечание.
Имя основного маркера должно храниться в конфигурации приложения в виде ключа, а секрет основного маркера — в формате ссылки на Key Vault для Конфигурации приложений, чтобы повысить уровень безопасности.
Создание и запуск приложения в службе приложений
Для веб-перехватчиков Сетки событий требуется проверка при создании. Вы можете проверить, следуя этому руководству или запустив приложение с помощью уже настроенной веб-библиотеки Конфигурация приложений Azure Spring, которая регистрирует приложение для вас. Чтобы использовать подписку на события, выполните действия, описанные в следующих двух разделах.
Задайте переменную среды.
Задайте переменную среды с именем APP_CONFIGURATION_ENDPOINT конечной точке хранилища Конфигурация приложений, найденной в разделе "Обзор хранилища" в портал Azure.
Если вы используете командную строку Windows, выполните следующую команду и перезапустите командную строку, чтобы изменения вступили в силу:
setx APP_CONFIGURATION_ENDPOINT "endpoint-of-your-app-configuration-store"
Если вы используете PowerShell, выполните следующую команду:
$Env:APP_CONFIGURATION_ENDPOINT = "endpoint-of-your-app-configuration-store"
Если вы используете macOS или Linux, выполните следующую команду:
export APP_CONFIGURATION_ENDPOINT='<endpoint-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
. По умолчанию заданы изменения типа событий "Ключ-значение" и удаление "Ключ-значение", причина может быть изменена вместе с помощью вкладки "Фильтры" для выбора точных причин отправки события отправки.Выберите для параметра
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", перейдите к следующему учебнику.