最新の安定バージョンについては、Spring Cloud Zookeeper 5.0.2 を使用してください!

Zookeeper による分散構成

Zookeeper は、クライアントが構成データなどの任意のデータを保存できるようにする階層名前空間 [Apache] (英語) を提供します。Spring Cloud Zookeeper Config は構成サーバーとクライアント [GitHub] (英語) の代替です。構成は、特別な「ブートストラップ」フェーズ中に Spring 環境にロードされます。設定はデフォルトで /config 名前空間に保存されます。Spring Cloud Config のプロパティ解決順序を模倣するために、アプリケーションの名前とアクティブなプロファイルに基づいて複数の PropertySource インスタンスが作成されます。例: testApp という名前と dev プロファイルを持つアプリケーションには、次のプロパティソースが作成されています。

  • config/testApp,dev

  • config/testApp

  • config/application,dev

  • config/application

最も具体的なプロパティソースが上部にあり、最も具体的でないプロパティソースが下部にあります。config/application 名前空間のプロパティは、構成に zookeeper を使用するすべてのアプリケーションに適用されます。config/testApp 名前空間のプロパティは、testApp という名前のサービスのインスタンスでのみ使用できます。

現在、構成はアプリケーションの起動時に読み取られます。HTTP POST リクエストを /refresh に送信すると、構成が再ロードされます。(Zookeeper がサポートする) 構成名前空間を監視することもできます。

アクティブ化

org.springframework.cloud:spring-cloud-starter-zookeeper-config への依存関係を含めると、Spring Cloud Zookeeper Config をセットアップする自動構成が有効になります。

Zookeeper のバージョン 3.4 を使用する場合は、ここで説明されているように依存関係を含める方法を変更する必要があります。

Spring Boot 構成データのインポート

Spring Boot 2.4 では、spring.config.import プロパティを介して構成データをインポートする新しい方法が導入されました。これが、Zookeeper から構成を取得するデフォルトの方法になりました。

オプションで Zookeeper に接続して構成するには、application.properties で次のように設定します。

application.properties
spring.config.import=optional:zookeeper:

これにより、デフォルトの場所 "localhost:2181" で Zookeeper に接続されます。optional: プレフィックスを削除すると、Zookeeper に接続できない場合に Zookeeper Config が失敗します。Zookeeper Config の接続プロパティを変更するには、spring.cloud.zookeeper.connect-string を設定するか、spring.config.import=optional:zookeeper:myhost:2818 などの接続文字列を spring.config.import ステートメントに追加します。インポートプロパティの場所は、connect-string プロパティよりも優先されます。

Zookeeper Config は、spring.cloud.zookeeper.config.name (デフォルトは spring.application.name プロパティの値) および spring.cloud.zookeeper.config.default-context (デフォルトは application) に基づいて 4 つの自動コンテキストから値をロードしようとします。計算されたコンテキストを使用するのではなく、コンテキストを指定したい場合は、その情報を spring.config.import ステートメントに追加できます。

application.properties
spring.config.import=optional:zookeeper:myhost:2181/contextone;/context/two

これにより、オプションで /contextone および /context/two からのみ構成がロードされます。

spring.config.import を介してインポートする Spring Boot Config Data メソッドには、bootstrap ファイル(プロパティまたは yaml)は必要ありません。

カスタマイズ

Zookeeper Config は、次のプロパティを設定することでカスタマイズできます。

spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: configuration
        defaultContext: apps
        profileSeparator: '::'
  • enabled: この値を false に設定すると、Zookeeper Config が無効になります。

  • root: 構成値のベース名前空間を設定します。

  • defaultContext: すべてのアプリケーションで使用される名前を設定します。

  • profileSeparator: プロファイルを含むプロパティソース内のプロファイル名を区切るために使用される区切り文字の値を設定します。

spring.cloud.bootstrap.enabled=true または spring.config.use-legacy-processing=true を設定した場合、または spring-cloud-starter-bootstrap を組み込んだ場合は、上記の値を application.yml ではなく bootstrap.yml に入れる必要があります。

アクセス制御リスト (ACL)

CuratorFramework Bean の addAuthInfo メソッドを呼び出すことで、Zookeeper ACL の認証情報を追加できます。これを実現する 1 つの方法は、次の例に示すように、独自の CuratorFramework Bean を提供することです。

@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {

  @Bean
  public CuratorFramework curatorFramework() {
    CuratorFramework curator = new CuratorFramework();
    curator.addAuthInfo("digest", "user:password".getBytes());
    return curator;
  }

}

CuratorFramework Bean のデフォルト構成を確認するには、ZookeeperAutoConfiguration クラス [GitHub] (英語) を参照してください。

あるいは、次の例に示すように、既存の CuratorFramework Bean に依存するクラスから資格情報を追加することもできます。

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

  public ZookeeperConfig(CuratorFramework curator) {
    curator.addAuthInfo("digest", "user:password".getBytes());
  }

}

この Bean の作成は、ブーストラップフェーズ中に行う必要があります。次の例に示すように、構成クラスに @BootstrapConfiguration のアノテーションを付け、resources/META-INF/spring.factories ファイルの org.springframework.cloud.bootstrap.BootstrapConfiguration プロパティの値として設定するコンマ区切りのリストに含めることによって、このフェーズで実行する構成クラスを登録できます。

リソース /META-INF/spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
my.project.CustomCuratorFrameworkConfig,\
my.project.DefaultCuratorFrameworkConfig