組合環境倉庫

在某些場景下,您可能希望從多個環境倉庫中拉取配置資料。為此,您可以在配置伺服器的 application properties 或 YAML 檔案中啟用 composite profile。例如,如果您想從一個 Subversion 倉庫以及兩個 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 倉庫中為相同屬性找到的值。在 rex Git 倉庫中找到的值將優先於在 walter Git 倉庫中為相同屬性找到的值。

如果您只想從每種型別 distinct 的倉庫中拉取配置資料,您可以在配置伺服器的 application properties 或 YAML 檔案中啟用相應的 profile,而不是 composite profile。例如,如果您想從一個 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 token。請參閱Vault 後端
從環境倉庫檢索值時發生的任何型別的失敗都會導致整個組合環境失敗。如果您希望即使倉庫失敗組合環境也能繼續,可以將 spring.cloud.config.server.failOnCompositeError 設定為 false
使用組合環境時,重要的是所有倉庫都包含相同的標籤。如果您的環境類似於前述示例,並且您使用 master 標籤請求配置資料,但 Subversion 倉庫不包含名為 master 的分支,則整個請求將失敗。

自定義組合環境倉庫

除了使用 Spring Cloud 中的一個環境倉庫外,您還可以提供自己的 EnvironmentRepository bean 作為組合環境的一部分包含進來。為此,您的 bean 必須實現 EnvironmentRepository 介面。如果您想控制自定義 EnvironmentRepository 在組合環境中的優先順序,您還應該實現 Ordered 介面並覆蓋 getOrdered 方法。如果您不實現 Ordered 介面,您的 EnvironmentRepository 將被賦予最低優先順序。