チュートリアル:Java Spring アプリで動的構成を使用する
App Configuration には、Spring 用のライブラリが 2 つあります。
spring-cloud-azure-appconfiguration-config
は Spring Boot を必要とし、spring-cloud-context
に依存します。spring-cloud-azure-appconfiguration-config-web
は Spring Boot に加えて Spring Web を必要とし、構成の更新の自動チェックに対するサポートも追加します。
どちらのライブラリも、更新された構成値をチェックするための手動トリガーをサポートしています。
更新により、アプリケーションを再起動する必要なしに構成値を更新できますが、@RefreshScope
のすべての Bean が再作成されます。 メタデータを含む、構成済みのトリガーに対する変更がチェックされます。 既定では、変更のチェック間隔 (更新間隔) の最小時間は 30 秒に設定されます。
spring-cloud-azure-appconfiguration-config-web
の自動更新は、アクティビティ (特に Spring Web の ServletRequestHandledEvent
) に基づいてトリガーされます。 ServletRequestHandledEvent
がトリガーされない場合は、キャッシュの有効期限が切れていても、spring-cloud-azure-appconfiguration-config-web
の自動更新によって更新はトリガーされません。
手動更新を使用する
手動更新を使用するには、App Configuration を使用する Spring Boot アプリ (App Configuration 用の Spring Boot クイックスタートに従って作成したアプリなど) から始めます。
App Configuration は AppConfigurationRefresh
を公開します。これは、キャッシュの有効期限が切れているかどうかを確認するために使用できます。 有効期限が切れている場合は、更新がトリガーされます。
AppConfigurationRefresh
を使用するために、HelloController を更新します。import com.azure.spring.cloud.config.AppConfigurationRefresh; @RestController public class HelloController { private final MessageProperties properties; @Autowired(required = false) private AppConfigurationRefresh refresh; public HelloController(MessageProperties properties) { this.properties = properties; } @GetMapping public String getMessage() throws InterruptedException, ExecutionException { if (refresh != null) { refresh.refreshConfigurations(); } return "Message: " + properties.getMessage(); } }
AppConfigurationRefresh
のrefreshConfigurations()
は、更新がトリガーされている場合は true、そうでない場合は false であるMono
を返します。 False は、キャッシュの有効期限が切れていないか、変更がなかったか、または別のスレッドが現在更新をチェック中であることを意味します。最新の情報への更新を有効にするために、
bootstrap.properties
を更新します。spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30s spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel
Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作] で [構成エクスプローラー] を選択し、 [+ 作成]>[キー値] の順に選択して、新しいキーと値のペアを作成します。
キー 値 sentinel 1 [ラベル] と [コンテンツの種類] は、現時点では空にしておきます。
[適用] を選択します。
自分の Spring Boot アプリケーションを Maven でビルドし、実行します。
mvn clean package mvn spring-boot:run
ブラウザー ウィンドウを開き、
http://localhost:8080
に移動します。 キーに関連付けられているメッセージが表示されます。curl を使用してアプリケーションをテストすることもできます。次に例を示します。
curl -X GET http://localhost:8080/
動的構成をテストするには、アプリケーションに関連付けられている Azure App Configuration ポータルを開きます。 [構成エクスプローラー] を選択し、表示されたキーの値を更新します。次に例を示します。
Key 値 /application/config.message Hello - Updated 前に作成した sentinel キーを新しい値に更新します。 この変更により、更新間隔が経過すると、アプリケーションですべての構成キーが更新されます。
Key 値 sentinel 2 ブラウザー ページを 2 回更新し、新しいメッセージが表示されるのを確認します。 1 回目で更新がトリガーされ、2 回目で変更が読み込まれます。
Note
ライブラリによって変更が確認されるのは、更新間隔が経過した後のみです。 期間が経過していない場合、変更は表示されません。 期間が経過するまで待ってから、更新チェックをトリガーしてください。
自動更新を使用する
自動更新を使用するためには、App Configuration を使用する Spring Boot アプリから始めてみましょう。たとえば、App Configuration 用の Spring Boot クイックスタートで作成したアプリが利用できます。
テキスト エディターで pom.xml ファイルを開き、次のコードを使用して spring-cloud-azure-appconfiguration-config-web
の <dependency>
を追加します。
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
<version>5.18.0</version>
</dependency>
最新の情報への更新を有効にするために、
bootstrap.properties
を更新します。spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30s spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel
Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作] で [構成エクスプローラー] を選択し、 [+ 作成]>[キー値] の順に選択して、新しいキーと値のペアを作成します。
キー 値 sentinel 1 [ラベル] と [コンテンツの種類] は、現時点では空にしておきます。
[適用] を選択します。
自分の Spring Boot アプリケーションを Maven でビルドし、実行します。
mvn clean package mvn spring-boot:run
ブラウザー ウィンドウを開き、
http://localhost:8080
に移動します。 キーに関連付けられているメッセージが表示されます。curl を使用してアプリケーションをテストすることもできます。次に例を示します。
curl -X GET http://localhost:8080/
動的構成をテストするには、アプリケーションに関連付けられている Azure App Configuration ポータルを開きます。 [構成エクスプローラー] を選択し、表示されたキーの値を更新します。次に例を示します。
Key 値 /application/config.message Hello - Updated 前に作成した sentinel キーを新しい値に更新します。 この変更により、更新間隔が経過すると、アプリケーションですべての構成キーが更新されます。
Key 値 sentinel 2 ブラウザー ページを 2 回更新し、新しいメッセージが表示されるのを確認します。 1 回目で更新がトリガーされます。元のスコープを使用して最初の要求が返されるため、2 回目は変更が読み込まれます。
注意
ライブラリによって変更がチェックされるのは、更新間隔が経過した後のみです。 更新間隔が経過していない場合、変更の確認は行われません。 間隔が経過するまで待ってから、更新チェックをトリガーしてください。
次のステップ
このチュートリアルでは、App Configuration から動的に構成設定を更新できるように Spring Boot アプリを設定しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。