你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:通过在 Java Spring 应用中使用推送刷新来使用动态配置

应用程序配置 Java Spring 客户端库支持按需更新配置,不需让应用程序重启。 应用程序可以配置为使用以下两种方法中的一种或两种来检测应用配置更改。

  • 轮询模型:这是使用轮询检测配置更改的默认行为。 设置的缓存值到期后,对 AppConfigurationRefreshrefreshConfigurations 的下一次调用将向服务器发送请求,以检查配置是否已更改,并根据需要拉取已更新的配置。

  • 推送模型:这将使用应用配置事件检测配置更改。 应用程序配置设置为使用事件网格发送键值更改事件后,应用程序就可以通过 Webhook,使用这些事件来优化保持配置更新所需的请求总数。

本教程演示如何在代码中使用推送刷新实现动态配置更新。 它建立在快速入门中介绍的应用之上。 请先完成使用应用程序配置创建 Java Spring 应用,然后再继续。

你可以使用任何代码编辑器执行本教程中的步骤。 Visual Studio Code 是 Windows、macOS 和 Linux 平台上提供的一个卓越选项。

在本教程中,你将了解如何执行以下操作:

  • 设置订阅以将配置更改事件从“应用程序配置”发送到“Webhook”
  • 将 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 应用服务部署,以便可以通过 Maven 将应用程序部署到 Azure 应用服务。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  3. 打开 bootstrap.properties 并配置Azure 应用程序配置推送刷新。

    # 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 秒。

注意

主令牌名应作为密钥存储在应用程序配置中,然后主令牌机密应作为“应用程序配置密钥保管库参考”来进行存储,以增加安全性。

在应用服务中生成并运行应用

事件网格 Webhook 需要在创建时进行验证。 可以按照本指南进行验证,也可以通过启动已配置了 Azure 应用程序配置 Spring Web 库(此过程将注册应用程序)的应用程序来验证。 要使用事件订阅,请按照以下两部分中的步骤操作。

  1. 将环境变量设置为应用程序配置实例的连接字符串:

    setx AppConfigurationConnectionString <connection-string-of-your-app-configuration-store>
    
  2. 更新 azure-webapp-maven-pluginconfiguration 添加下的 pom.xml

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. 运行以下命令以生成控制台应用:

     mvn package
    
  4. 生成成功完成后,请运行以下命令以在本地运行应用:

    mvn azure-webapp:deploy
    

设置事件订阅

  1. 在 Azure 门户中打开“应用配置”资源,然后在 Events 窗格中单击 + Event Subscription

    The events pane has an option to create new Subscriptions.

  2. 输入 Event SubscriptionSystem Topic 的名称。 默认情况下,设置了事件类型“键值修改”和“键值删除”,该设置可更改,方法是使用“筛选器”选项卡,选择发送“推送事件”的确切原因。

    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?{your-token-name}={your-token-secret}”。 例如 https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. 单击 Create 以添加事件订阅。 选择 Create 后,将会向应用程序发送 Webhook 注册请求。 这由 Azure 应用程序配置客户端库接收、验证并返回有效响应。

  6. 单击 Events 窗格中的 Event Subscriptions 以验证订阅是否已成功创建。

    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 托管标识来简化对应用程序配置的访问,请继续学习下一篇教程。