チュートリアル:Java Spring アプリで動的構成を使用する

App Configuration には、Spring 用のライブラリが 2 つあります。

  • azure-spring-cloud-appconfiguration-config は Spring Boot を必要とし、spring-cloud-context に依存します。
  • azure-spring-cloud-appconfiguration-config-web は Spring Boot に加えて Spring Web を必要とし、構成の更新の自動チェックに対するサポートも追加します。

どちらのライブラリも、更新された構成値をチェックするための手動トリガーをサポートしています。

更新により、アプリケーションを再起動することなく構成値を更新できますが、@RefreshScope のすべての Bean が再作成されることになります。 メタデータを含む、構成済みのトリガーに対する変更がチェックされます。 既定では、変更のチェック間隔 (更新間隔) の最小時間は 30 秒に設定されます。

azure-spring-cloud-appconfiguration-config-web の自動更新は、アクティビティ (特に Spring Web の ServletRequestHandledEvent) に基づいてトリガーされます。 ServletRequestHandledEvent がトリガーされない場合は、キャッシュの有効期限が切れても、azure-spring-cloud-appconfiguration-config-web の自動更新によって更新がトリガーされることはありません。

手動更新を使用する

手動更新を使用するには、App Configuration を使用する Spring Boot アプリ (App Configuration 用の Spring Boot クイックスタートに従って作成したアプリなど) から始めます。

App Configuration は AppConfigurationRefresh を公開します。これは、キャッシュの有効期限が切れているかどうかを確認し、有効期限が切れていれば更新をトリガーするために使用できます。

  1. AppConfigurationRefresh を使用するように HelloController を更新します。

    import com.azure.spring.cloud.config.AppConfigurationRefresh;
    
    ...
    
    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();
        }
    }
    

    AppConfigurationRefreshrefreshConfigurations() は、更新がトリガーされている場合は true、そうでない場合は false である Future を返します。 False は、キャッシュの有効期限が切れていないか、変更がなかったか、または別のスレッドが現在更新をチェック中であることを意味します。

  2. 最新の情報への更新を有効にするために、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
    
  3. Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作][構成エクスプローラー] を選択し、 [+ 作成]>[キー値] の順に選択して、新しいキーと値のペアを作成します。

    キー
    sentinel 1

    [ラベル][コンテンツの種類] は、現時点では空にしておきます。

  4. [適用] を選択します。

  5. 自分の Spring Boot アプリケーションを Maven でビルドし、実行します。

    mvn clean package
    mvn spring-boot:run
    
  6. ブラウザー ウィンドウを開き、http://localhost:8080 に移動します。 キーに関連付けられているメッセージが表示されます。

    curl を使用してアプリケーションをテストすることもできます。次に例を示します。

    curl -X GET http://localhost:8080/
    
  7. 動的構成をテストするには、アプリケーションに関連付けられている Azure App Configuration ポータルを開きます。 [構成エクスプローラー] を選択し、表示されたキーの値を更新します。次に例を示します。

    Key Value
    /application/config.message Hello - Updated
  8. 前に作成した sentinel キーを新しい値に更新します。 この変更により、更新間隔が経過すると、アプリケーションですべての構成キーが更新されます。

    キー
    sentinel 2
  9. ブラウザー ページを 2 回更新し、新しいメッセージが表示されるのを確認します。 1 回目で更新がトリガーされ、2 回目で変更が読み込まれます。

注意

ライブラリによって変更がチェックされるのは、更新間隔が経過した後のみです。期間が経過していない場合、変更は表示されません。期間が経過するまで待ってから、更新チェックをトリガーする必要があります。

自動更新を使用する

自動更新を使用するためには、App Configuration を使用する Spring Boot アプリから始めてみましょう。たとえば、App Configuration 用の Spring Boot クイックスタートで作成したアプリが利用できます。

テキスト エディターで pom.xml ファイルを開き、次のコードを使用して azure-spring-cloud-appconfiguration-config-web<dependency> を追加します。

Spring Boot

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>azure-spring-cloud-appconfiguration-config-web</artifactId>
    <version>2.6.0</version>
</dependency>

Note

古い依存関係のサポートが必要な場合は、以前のライブラリを参照してください。

  1. 最新の情報への更新を有効にするために、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
    
  2. Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作][構成エクスプローラー] を選択し、 [+ 作成]>[キー値] の順に選択して、新しいキーと値のペアを作成します。

    キー
    sentinel 1

    [ラベル][コンテンツの種類] は、現時点では空にしておきます。

  3. [適用] を選択します。

  4. 自分の Spring Boot アプリケーションを Maven でビルドし、実行します。

    mvn clean package
    mvn spring-boot:run
    
  5. ブラウザー ウィンドウを開き、http://localhost:8080 に移動します。 キーに関連付けられているメッセージが表示されます。

    curl を使用してアプリケーションをテストすることもできます。次に例を示します。

    curl -X GET http://localhost:8080/
    
  6. 動的構成をテストするには、アプリケーションに関連付けられている Azure App Configuration ポータルを開きます。 [構成エクスプローラー] を選択し、表示されたキーの値を更新します。次に例を示します。

    Key Value
    /application/config.message Hello - Updated
  7. 前に作成した sentinel キーを新しい値に更新します。 この変更により、更新間隔が経過すると、アプリケーションですべての構成キーが更新されます。

    キー
    sentinel 2
  8. ブラウザー ページを 2 回更新し、新しいメッセージが表示されるのを確認します。 1 回目で更新がトリガーされます。元のスコープを使用して最初の要求が返されるため、2 回目は変更が読み込まれます。

注意

ライブラリによって変更がチェックされるのは、更新間隔が経過した後のみです。 更新間隔が経過していない場合、変更はチェックされません。間隔が経過するまで待ってから、更新チェックをトリガーする必要があります。

次のステップ

このチュートリアルでは、App Configuration から動的に構成設定を更新できるように Spring Boot アプリを設定しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。