Consul による分散構成

Consul は、構成やその他のメタデータを保存するためのキー / 値ストア (英語) を提供します。Spring Cloud Consul Config は、構成サーバーとクライアント [GitHub] (英語) の代替です。構成は、特別な「ブートストラップ」フェーズ中に Spring 環境にロードされます。構成は、デフォルトでは /config フォルダーに保存されます。アプリケーションの名前と、プロパティを解決する Spring Cloud Config の順序を模倣するアクティブプロファイルに基づいて、複数の PropertySource インスタンスが作成されます。例: "testApp" という名前で "dev" プロファイルを持つアプリケーションでは、次のプロパティソースが作成されます。

config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

最も具体的なプロパティソースは上部にあり、最も具体的でないプロパティソースは下部にあります。config/application フォルダー内のプロパティは、構成に consul を使用するすべてのアプリケーションに適用されます。config/testApp フォルダー内のプロパティは、"testApp" という名前のサービスのインスタンスでのみ使用できます。

現在、構成はアプリケーションの起動時に読み取られます。HTTP POST を /refresh に送信すると、構成が再ロードされます。構成監視は、変更を自動的に検出し、アプリケーションコンテキストを再読み込みします。

アクティベート方法

Consul 構成を開始するには、グループ org.springframework.cloud およびアーティファクト ID spring-cloud-starter-consul-config のスターターを使用します。現在の Spring Cloud リリーストレインを使用したビルドシステムのセットアップの詳細については、Spring Cloud プロジェクトページを参照してください。

Spring Boot 構成データのインポート

Spring Boot 2.4 では、spring.config.import プロパティを介して構成データをインポートする新しい方法が導入されました。これが、Consul から構成を取得するデフォルトの方法になりました。

オプションで Consul に接続するには、application.properties で次のように設定します。

application.properties
spring.config.import=optional:consul:

これにより、"http://localhost:8500" のデフォルトの場所にある Consul エージェントに接続されます。optional: プレフィックスを削除すると、Consul に接続できない場合に Consul Config が失敗します。Consul Config の接続プロパティを変更するには、spring.cloud.consul.host および spring.cloud.consul.port を設定するか、ホスト / ポートのペアを spring.config.import=optional:consul:myhost:8500 などの spring.config.import ステートメントに追加します。インポートプロパティの場所は、ホストおよびポートプロパティよりも優先されます。

Consul Config は、spring.cloud.consul.config.name (デフォルトは spring.application.name プロパティの値) および spring.cloud.consul.config.default-context (デフォルトは application) に基づいて 4 つの自動コンテキストから値をロードしようとします。計算されたコンテキストを使用するのではなく、コンテキストを指定したい場合は、その情報を spring.config.import ステートメントに追加できます。

application.properties
spring.config.import=optional:consul:myhost:8500/contextone;/context/two

これにより、オプションで /contextone および /context/two からのみ構成がロードされます。

spring.config.import を介してインポートする Spring Boot Config Data メソッドには、bootstrap ファイル(プロパティまたは yaml)は必要ありません。

カスタマイズ

Consul Config は、次のプロパティを使用してカスタマイズできます。

spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'
spring.cloud.bootstrap.enabled=true または spring.config.use-legacy-processing=true を設定した場合、または spring-cloud-starter-bootstrap を組み込んだ場合は、上記の値を application.yml ではなく bootstrap.yml に入れる必要があります。
  • enabled がこの値を "false" に設定すると、Consul Config が無効になります

  • prefix は構成値のベースフォルダーを設定します

  • defaultContext は、すべてのアプリケーションで使用されるフォルダー名を設定します。

  • profileSeparator は、プロファイルを含むプロパティソース内のプロファイル名を区切るために使用される区切り文字の値を設定します。

構成監視

Consul Config Watch は、キープレフィックスを監視する (英語) consul の機能を利用します。Config Watch は、ブロッキング Consul HTTP API 呼び出しを実行して、現在のアプリケーションに関連する構成データが変更されたかどうかを判断します。新しい構成データがある場合、リフレッシュイベントが発行されます。これは、/refresh アクチュエーターエンドポイントを呼び出すことと同じです。

Config Watch が呼び出される頻度を変更するには、spring.cloud.consul.config.watch.delay を変更します。デフォルト値は 1000 (ミリ秒単位) です。遅延は、前の呼び出しが終了してから次の呼び出しが開始されるまでの時間です。

Config Watch を無効にするには、spring.cloud.consul.config.watch.enabled=false を設定します。

監視は Spring TaskScheduler を使用して領事への呼び出しをスケジュールします。デフォルトでは、poolSize が 1 の ThreadPoolTaskScheduler です。TaskScheduler を変更するには、ConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME 定数で名前が付けられた TaskScheduler 型の Bean を作成します。

YAML または構成を含むプロパティ

個々のキーと値のペアではなく、プロパティの BLOB を YAML またはプロパティ形式で保存する方が便利な場合があります。spring.cloud.consul.config.format プロパティを YAML または PROPERTIES に設定します。たとえば、YAML を使用するには:

spring:
  cloud:
    consul:
      config:
        format: YAML
spring.cloud.bootstrap.enabled=true または spring.config.use-legacy-processing=true を設定した場合、または spring-cloud-starter-bootstrap を組み込んだ場合は、上記の値を application.yml ではなく bootstrap.yml に入れる必要があります。

YAML は、consul の適切な data キーに設定する必要があります。キーの上にデフォルトを使用すると、次のようになります。

config/testApp,dev/data
config/testApp/data
config/application,dev/data
config/application/data

YAML ドキュメントは、上記のキーのいずれかに保存できます。

spring.cloud.consul.config.data-key を使用してデータキーを変更できます。

git2consul と構成

git2consul は、git リポジトリから個々のキーにファイルを Consul にロードする Consul コミュニティプロジェクトです。デフォルトでは、キーの名前はファイルの名前です。YAML ファイルとプロパティファイルは、それぞれ .yml と .properties のファイル拡張子でサポートされます。spring.cloud.consul.config.format プロパティを FILES に設定します。例:

bootstrap.yml
spring:
  cloud:
    consul:
      config:
        format: FILES

/config に次のキー、development プロファイル、アプリケーション名 foo があるとします。

.gitignore
application.yml
bar.properties
foo-development.properties
foo-production.yml
foo.properties
master.ref

次のプロパティソースが作成されます。

config/foo-development.properties
config/foo.properties
config/application.yml

各キーの値は、適切にフォーマットされた YAML またはプロパティファイルである必要があります。

フェイルファスト

特定の状況 (ローカル開発や特定のテストシナリオなど) では、consul を構成に使用できない場合でも失敗しないようにすると便利な場合があります。spring.cloud.consul.config.fail-fast=false を設定すると、構成モジュールは例外をスローするのではなく、警告をログに記録します。これにより、アプリケーションは通常どおり起動を続行できるようになります。

spring.cloud.bootstrap.enabled=true または spring.config.use-legacy-processing=true を設定した場合、または spring-cloud-starter-bootstrap を組み込んだ場合は、上記の値を application.yml ではなく bootstrap.yml に入れる必要があります。