複合環境倉庫

在某些場景下,您可能希望從多個環境倉庫中拉取配置資料。為此,您可以在配置伺服器的應用程式屬性或 YAML 檔案中啟用 composite 配置檔案。例如,如果您希望從 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 倉庫中找到的相同屬性的值之前使用。

如果您只想從每種型別都不同的倉庫中拉取配置資料,您可以在配置伺服器的應用程式屬性或 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 中的一個環境倉庫之外,您還可以提供自己的 EnvironmentRepository Bean 作為複合環境的一部分。為此,您的 Bean 必須實現 EnvironmentRepository 介面。如果您想控制自定義 EnvironmentRepository 在複合環境中的優先順序,您還應該實現 Ordered 介面並覆蓋 getOrdered 方法。如果您不實現 Ordered 介面,您的 EnvironmentRepository 將被賦予最低優先順序。

© . This site is unofficial and not affiliated with VMware.