複合環境儲存庫

在某些情況下,您可能希望從多個環境儲存庫提取組態資料。若要這麼做,您可以在組態伺服器的應用程式屬性或 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 儲存庫中針對相同屬性找到的值。

如果您只想從各自屬於不同類型的儲存庫提取組態資料,您可以啟用對應的 profile,而不是組態伺服器的應用程式屬性或 YAML 檔案中的 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 令牌。請參閱 Vault 後端
從環境儲存庫檢索值時,任何類型的失敗都會導致整個複合環境失敗。如果您希望即使儲存庫失敗,複合環境也能繼續運作,您可以將 spring.cloud.config.server.failOnCompositeError 設定為 false
使用複合環境時,重要的是所有儲存庫都包含相同的標籤。如果您有一個類似於前面範例中的環境,並且您請求具有 master 標籤的組態資料,但 Subversion 儲存庫不包含名為 master 的分支,則整個請求都會失敗。

自訂複合環境儲存庫

除了使用 Spring Cloud 的環境儲存庫之一外,您還可以提供自己的 EnvironmentRepository bean,以包含為複合環境的一部分。若要這麼做,您的 bean 必須實作 EnvironmentRepository 介面。如果您想要控制自訂 EnvironmentRepository 在複合環境中的優先順序,您也應該實作 Ordered 介面並覆寫 getOrdered 方法。如果您未實作 Ordered 介面,您的 EnvironmentRepository 將被賦予最低優先順序。