教學課程:利用 JAVA Spring 應用程式中的發送重新整理使用動態組態
應用程式組態 JAVA Spring 用戶端程式庫可依需求支援更新設定,而不會導致應用程式重新啟動。 應用程式可以設定成使用下列兩種方式中,其中一種或兩種方式來偵測應用程式組態中的變更。
輪詢模型:輪詢模型是使用輪詢來偵測組態變更的默認行為。 設定的快取值到期后,下一次呼叫
AppConfigurationRefresh
refreshConfigurations
會傳送要求給伺服器,以檢查組態是否已變更,並視需要提取更新的組態。發送模型:使用應用程式組態事件來偵測組態中的變更。 一旦應用程式組態設定為使用事件方格傳送金鑰鍵值變更事件,透過 WebHook,應用程式就可以利用這些事件來最佳化所需的要求總數,讓設定保持更新。
本教學課程會示範如何使用發送重新整理在程式碼中實作動態設定更新。 本文會以快速入門中介紹的應用程式作為基礎。 繼續之前,請先結束使用應用程式設定建立 JAVA Spring 應用程式。
您可以使用任何程式碼編輯器來進行本教學課程中的步驟。 Windows、macOS 及 Linux 平台上都有提供的 Visual Studio Code 是一個絕佳的選項。
在本教學課程中,您會了解如何:
- 設定訂用帳戶,將組態變更事件從應用程式組態傳送至 WebHook
- 將 Spring Boot 應用程式部署到 App Service
- 設定您的 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 App Service 部署,讓應用程式可以透過 Maven 部署至 Azure App Service。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
流覽至
resources
應用程式的目錄,然後開啟並設定bootstrap.properties
Azure 應用程式組態 推送重新整理。 如果檔案不存在,請加以建立。 在檔案中新增以下一行。您可以使用
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()); } }
並新增組態Bootstrap組態,方法是在目錄下
resources/META-INF
建立spring.factories
檔案,並新增下列幾行,並使用您的應用程式名稱和套件進行更新com.example.MyApplication
:org.springframework.cloud.bootstrap.BootstrapConfiguration=\ com.example.MyApplication
在快取值標示為變更前,會新增隨機延遲,以減少潛在的節流。 在快取值標示為變更前,預設延遲上限為 30 秒。
注意
主要權杖名稱應該作為金鑰儲存在應用程式組態內,然後主要權杖祕密應該儲存為應用程式組態金鑰保存庫參考,以加強安全性。
在應用程式服務中組建並執行應用程式
事件方格 WebHook 在建立時需要進行驗證。 您可以依照本指南進行驗證,或啟動已設定 Azure 應用程式組態 Spring Web Library 的應用程式,以為您註冊您的應用程式。 若要使用事件訂用帳戶,請遵循下面兩節的步驟。
設定環境變數。
將名為 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>'
重新啟動命令提示字元,讓變更生效。 輸出環境變數的值,以驗證其設定是否正確。
在
azure-webapp-maven-plugin
的configuration
新增下更新您的pom.xml
<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?{your-token-name}={your-token-secret}"。 例如,
https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret
選取
Create
以建立事件訂用帳戶。 選取時Create
,Web Hook 的註冊要求會傳送至您的應用程式。 Azure 應用程式組態 客戶端連結庫收到要求,並驗證並傳回有效的回應。在
Events
窗格中選取Event Subscriptions
,以驗證已成功建立訂用帳戶。
注意
訂閱組態變更時,可以使用一或多個篩選條件來減少傳送至應用程式的事件數目。 您可以將這些設定為事件方格訂閱篩選條件。 例如,訂閱篩選條件可用來只訂閱事件,針對特定字串開頭的金鑰變更。
注意
如果您的應用程式有多個執行個體正在執行,則可以使用需要設定 Azure 服務匯流排的 appconfiguration-refresh-bus
端點 (該端點用於將訊息傳送至應用程式的所有執行個體以重新整理其設定)。 如果您的應用程式有多個執行個體正在執行,而且您想要確保所有執行個體都以最新的設定來更新,則這非常有用。 除非您已設定 spring-cloud-bus
為相依性,否則無法使用此端點。 如需詳細資訊,請參閱 Azure 服務匯流排 Spring Cloud Bus 檔。 只需要設定服務匯流排連線,而 Azure 應用程式組態程式庫會處理訊息的傳送和接收。
驗證和測試應用程式
在您的應用程式執行之後,使用 curl 來測試您的應用程式;例如:
curl -X GET https://my-azure-webapp.azurewebsites.net
開啟 Azure 入口網站,並瀏覽至應用程式相關的應用程式組態資源。 選取 [作業] 下的 [組態總管],然後更新下列金鑰值:
機碼 值 application/config.message Hello - 已更新 重新整理瀏覽器頁面,以查看所顯示的新訊息。
清除資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選取 [刪除資源群組]。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
下一步
在本教學課程中,您已啟用 JAVA 應用程式,以動態方式從應用程式組態重新整理組態設定。 若有進一步的問題,請參閱參考文件,其中包含 Spring Cloud Azure 應用程式組態程式庫運作方式的所有詳細資料。 若要了解如何使用 Azure 受控服務識別來簡化對應用程式組態的存取,請繼續進行下一個教學課程。