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 で次のように設定します。
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
ステートメントに追加できます。
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
に設定します。例:
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 に入れる必要があります。 |