Руководство. Использование динамической конфигурации с принудительным обновлением в приложении Java Spring

Клиентская библиотека Java Spring для Конфигурации приложений поддерживает обновление конфигурации по запросу без перезапуска приложения. Приложение можно настроить для обнаружения изменений в Конфигурации приложений с помощью одного из описанных ниже подходов или их обоих.

  • Модель опроса: это поведение по умолчанию, которое использует опрос для обнаружения изменений в конфигурации. Когда истекает срок действия кэшированного значения параметра, при следующем вызове AppConfigurationRefresh на сервер отправляется запрос refreshConfigurations, чтобы проверить, изменилась ли конфигурация. В таком случае извлекается обновленная конфигурация.

  • Модель отправки: это использует события Конфигурация приложений для обнаружения изменений в конфигурации. Когда в Конфигурации приложений будет настроена отправка событий изменения значения ключа в Сетку событий через веб-перехватчик, с помощью этих событий приложение сможет оптимизировать общее число запросов, требуемых для обновления конфигурации.

Из этого руководства вы узнаете, как реализовать динамические обновления конфигурации в коде путем обновления в режиме отправки. При этом в качестве основы используется код приложения, представленный в кратких руководствах. Прежде чем продолжить, выполните краткое руководство Создание приложения Java Spring с помощью Конфигурации приложений Azure.

Вы можете выполнять шаги в этом учебнике с помощью любого редактора кода. Visual Studio Code является отличным вариантом, который доступен на платформах Windows, macOS и Linux.

В этом руководстве описано следующее:

  • настройка подписки на отправку событий изменения конфигурации из Конфигурации приложений в веб-перехватчик;
  • развертывание приложения Spring Boot в службе приложений;
  • настройка обновления конфигурации в приложении Java Spring при изменении данных в Конфигурации приложений;
  • использование последней конфигурации в приложении.

Необходимые компоненты

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Настройка принудительного обновления

  1. Откройте файл 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>
    
  2. Настройте развертывание Maven для Службы приложений, чтобы приложение можно было развернуть в Службе приложений Azure через Maven.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  3. Откройте 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, которая автоматически зарегистрирует приложение. Чтобы использовать подписку на события, выполните действия, описанные в следующих двух разделах.

  1. Создайте переменную среды для строки подключения к экземпляре Конфигурации приложений:

    setx AppConfigurationConnectionString <connection-string-of-your-app-configuration-store>
    
  2. Обновление pom.xml в разделе добавления configurationazure-webapp-maven-plugin

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. Чтобы создать консольное приложение, выполните следующую команду:

     mvn package
    
  4. Когда создание завершится, запустите приложение локально с помощью следующей команды:

    mvn azure-webapp:deploy
    

Настройка подписки на событие

  1. Откройте ресурс Конфигурации приложений на портале Azure, а затем щелкните + Event Subscription в области Events.

    The events pane has an option to create new Subscriptions.

  2. Введите имена для Event Subscription и System Topic. По умолчанию задаются типы событий изменения и удаления пары "ключ — значение", но это можно изменить или на вкладке "Фильтры" выбрать точные причины для отправки события push-уведомления.

    Events require a name, topic, and filters.

  3. Выберите для параметра Endpoint Type значение Web Hook, а затем выберите Select an endpoint.

    Selecting Endpoint creates a new blade to enter the endpoint URI.

  4. Конечная точка составляется из URI приложения и строки /actuator/appconfiguration-refresh?{имя_маркера}={секрет_маркера}. Например так: https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. Щелкните Create, чтобы добавить подписку на событие. Если выбрано значение Create, приложению будет отправлен запрос на регистрацию веб-перехватчика. Клиентская библиотека Конфигурации приложений Azure принимает этот запрос, проверяет его и возвращает допустимый ответ.

  6. Нажмите Event Subscriptions в области Events, чтобы проверить, создана ли подписка.

    Web Hook shows up in a table on the bottom of the page.

Примечание.

При подписке на изменения конфигурации можно использовать один или несколько фильтров. Они позволяют сократить число событий, отправляемых в приложение. Их можно настроить в качестве фильтров подписок Сетки событий. Например, с помощью фильтра можно подписаться только на события изменений в ключе, который начинается с определенной строки.

Примечание.

Если у вас несколько экземпляров запущенного приложения, можно использовать appconfiguration-refresh-bus конечную точку, требующую настройки Служебная шина Azure, которая используется для отправки сообщения всем экземплярам приложения для обновления конфигурации. Это полезно, если у вас есть несколько экземпляров запущенного приложения и необходимо убедиться, что все экземпляры обновляются с помощью последней конфигурации. Эта конечная точка недоступна, если она spring-cloud-bus не настроена как зависимость. Дополнительные сведения см. в документации по Служебная шина Azure Spring Cloud Bus. Необходимо настроить только подключение служебной шины, и библиотека Конфигурация приложений Azure будет обрабатывать отправку и получение сообщений.

Проверка и тестирование приложения

  1. После запуска приложение можно протестировать с помощью средства curl, например:

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. Откройте портал Azure и перейдите к ресурсу Конфигурации приложений, который связан с вашим приложением. Выберите Обозреватель конфигураций в разделе Операции и измените значения указанных ниже ключей:

    Ключ Значение
    application/config.message Hello - Updated
  3. Обновите страницу браузера, чтобы просмотреть новое отображаемое сообщение.

Очистка ресурсов

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Важно!

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги

В этом руководстве показано, как настроить в приложении Java динамическое обновление параметров конфигурации из Конфигурации приложений. Если возникнут дополнительные вопросы, см. справочную документацию, в ней подробно описан принцип работы библиотеки Spring Cloud для Конфигурации приложений Azure. Чтобы узнать, как с помощью удостоверения, управляемого Azure, упростить доступ к службе "Конфигурация приложений Azure", перейдите к следующему учебнику.