Share via


教學課程:利用 JAVA Spring 應用程式中的發送重新整理使用動態組態

應用程式組態 JAVA Spring 用戶端程式庫可依需求支援更新設定,而不會導致應用程式重新啟動。 應用程式可以設定成使用下列兩種方式中,其中一種或兩種方式來偵測應用程式組態中的變更。

  • 輪詢模型:此預設行為使用輪詢以偵測組態變更。 設定的快取值到期後,下一次呼叫 AppConfigurationRefreshrefreshConfigurations 會將要求傳送給伺服器,以檢查組態是否已變更,並視需求提取更新的組態。

  • 發送模型:使用應用程式組態事件來偵測組態中的變更。 一旦應用程式組態設定為使用事件方格傳送金鑰鍵值變更事件,透過 WebHook,應用程式就可以利用這些事件來最佳化所需的要求總數,讓設定保持更新。

本教學課程會示範如何使用發送重新整理在程式碼中實作動態設定更新。 本文會以快速入門中介紹的應用程式作為基礎。 繼續之前,請先結束使用應用程式設定建立 JAVA Spring 應用程式

您可以使用任何程式碼編輯器來進行本教學課程中的步驟。 Windows、macOS 及 Linux 平台上都有提供的 Visual Studio Code 是一個絕佳的選項。

在本教學課程中,您會了解如何:

  • 設定訂用帳戶,將組態變更事件從應用程式組態傳送至 WebHook
  • 將 Spring Boot 應用程式部署到 App Service
  • 設定您的 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 App Service 部署,讓應用程式可以透過 Maven 部署至 Azure App Service。

    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.

注意

訂閱組態變更時,可以使用一或多個篩選條件來減少傳送至應用程式的事件數目。 您可以將這些設定為事件方格訂閱篩選條件。 例如,訂閱篩選條件可用來只訂閱事件,針對特定字串開頭的金鑰變更。

注意

如果您的應用程式有多個執行個體正在執行,則可以使用需要設定 Azure 服務匯流排的 appconfiguration-refresh-bus 端點 (該端點用於將訊息傳送至應用程式的所有執行個體以重新整理其設定)。 如果您的應用程式有多個執行個體正在執行,而且您想要確保所有執行個體都以最新的設定來更新,則這非常有用。 除非您已設定 spring-cloud-bus 為相依性,否則無法使用此端點。 如需詳細資訊,請參閱 Azure 服務匯流排 Spring Cloud 匯流排文件。 只需要設定服務匯流排連線,而 Azure 應用程式組態程式庫會處理訊息的傳送和接收。

驗證和測試應用程式

  1. 在您的應用程式執行之後,使用 curl 來測試您的應用程式;例如:

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. 開啟 Azure 入口網站,並瀏覽至應用程式相關的應用程式組態資源。 選取 [作業] 下的 [組態總管],然後更新下列金鑰值:

    機碼
    application/config.message Hello - 已更新
  3. 重新整理瀏覽器頁面,以查看所顯示的新訊息。

清除資源

如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。

重要

刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。

  1. 登入 Azure 入口網站,然後選取 [資源群組]
  2. 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
  3. 在結果清單中,選取資源群組名稱以查看概觀。
  4. 選取 [刪除資源群組]
  5. 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]

不久後,系統便會刪除該資源群組及其所有的資源。

下一步

在本教學課程中,您已啟用 JAVA 應用程式,以動態方式從應用程式組態重新整理組態設定。 若有進一步的問題,請參閱參考文件,其中包含 Spring Cloud Azure 應用程式組態程式庫運作方式的所有詳細資料。 若要了解如何使用 Azure 受控服務識別來簡化對應用程式組態的存取,請繼續進行下一個教學課程。