複合環境リポジトリ
シナリオによっては、複数の環境リポジトリから構成データをプルしたい場合があります。これを行うには、構成サーバーのアプリケーションプロパティまたは YAML ファイルで composite プロファイルを有効にします。たとえば、Subversion リポジトリと 2 つの Git リポジトリから構成データをプルする場合は、構成サーバーに次のプロパティを設定できます。
spring:
profiles:
active: composite
cloud:
config:
server:
composite:
-
type: svn
uri: file:///path/to/svn/repo
-
type: git
uri: file:///path/to/rex/git/repo
-
type: git
uri: file:///path/to/walter/git/repo この構成を使用すると、優先順位は、リポジトリが composite キーにリストされている順序によって決定されます。上記の例では、Subversion リポジトリが最初にリストされているため、Subversion リポジトリで見つかった値は、Git リポジトリの 1 つで同じプロパティで見つかった値を上書きします。rex Git リポジトリで見つかった値は、walter Git リポジトリで同じプロパティで見つかった値の前に使用されます。
それぞれ異なる型のリポジトリからのみ構成データをプルする場合は、構成サーバーのアプリケーションプロパティまたは YAML ファイルで、composite プロファイルではなく、対応するプロファイルを有効にできます。たとえば、単一の Git リポジトリと単一の HashiCorp Vault サーバーから構成データをプルする場合は、構成サーバーに次のプロパティを設定できます。
spring:
profiles:
active: git, vault
cloud:
config:
server:
git:
uri: file:///path/to/git/repo
order: 2
vault:
host: 127.0.0.1
port: 8200
order: 1 この構成を使用すると、order プロパティによって優先順位を決定できます。order プロパティを使用して、すべてのリポジトリの優先順位を指定できます。order プロパティの数値が小さいほど、優先度が高くなります。リポジトリの優先順位は、同じプロパティの値を含むリポジトリ間の潜在的な競合を解決できます。
| 前の例のように、複合環境に Vault サーバーが含まれている場合は、構成サーバーに対して行われるすべてのリクエストに Vault トークンを含める必要があります。Vault バックエンドを参照してください。 |
環境リポジトリから値を取得するときに何らかの型の障害が発生すると、複合環境全体で障害が発生します。リポジトリに障害が発生した場合でもコンポジットを続行する場合は、spring.cloud.config.server.failOnCompositeError を false に設定できます。 |
複合環境を使用する場合、すべてのリポジトリに同じラベルが含まれていることが重要です。前の例と同様の環境があり、master ラベルを使用して構成データをリクエストしたが、Subversion リポジトリに master と呼ばれるブランチが含まれていない場合、リクエスト全体が失敗します。 |
カスタム複合環境リポジトリ
Spring Cloud の環境リポジトリの 1 つを使用することに加えて、複合環境の一部として含まれる独自の EnvironmentRepository Bean を提供することもできます。そのためには、Bean が EnvironmentRepository インターフェースを実装する必要があります。複合環境内でカスタム EnvironmentRepository の優先度を制御する場合は、Ordered インターフェースも実装し、getOrdered メソッドをオーバーライドする必要があります。Ordered インターフェースを実装しない場合、EnvironmentRepository には最低の優先順位が与えられます。