如需最新的稳定版本,请使用 Spring Cloud Zookeeper 4.2.0spring-doc.cadn.net.cn

使用 Zookeeper 进行分布式配置

Zookeeper 提供了一个分层命名空间,允许 Client 端存储任意数据,例如配置数据。Spring Cloud Zookeeper Config 是 Config Server 和 Client 的替代方案。 在特殊的 “bootstrap” 期间,将配置加载到 Spring Environment 中 阶段。配置存储在/confignamespace 中。倍数PropertySource根据应用程序的名称和活动的 配置文件,以模拟解析属性的 Spring Cloud Config 顺序。例如, 名称为testApp并使用devprofile 具有以下属性 为其创建的源:spring-doc.cadn.net.cn

最具体的属性源位于顶部,最不具体的属性源位于底部。 属性config/application命名空间应用于所有使用 zookeeper 进行配置。属性config/testAppnamespace 可用 仅对名为testApp.spring-doc.cadn.net.cn

当前在应用程序启动时读取配置。发送 HTTPPOSTrequest 添加到/refresh导致重新加载配置。观察配置 命名空间(Zookeeper 支持)也可用。spring-doc.cadn.net.cn

激活

包括 对org.springframework.cloud:spring-cloud-starter-zookeeper-config使 auto配置,设置 Spring Cloud Zookeeper Config。spring-doc.cadn.net.cn

使用 Zookeeper 版本 3.4 时,您需要更改 此处所述的包含依赖项的方式。

Spring Boot Config 数据导入

Spring Boot 2.4 引入了一种通过spring.config.import财产。这是现在从 Zookeeper 获取配置的默认方式。spring-doc.cadn.net.cn

要选择性地连接到 Zookeeper 进行配置,请在 application.properties 中设置以下内容:spring-doc.cadn.net.cn

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

这将连接到默认位置 “localhost:2181” 的 Zookeeper。删除optional:前缀会导致 Zookeeper Config 无法连接到 Zookeeper 失败。要更改 Zookeeper Config 的连接属性,请将spring.cloud.zookeeper.connect-string或将 connect 字符串添加到spring.config.import语句,例如,spring.config.import=optional:zookeeper:myhost:2818.import 属性中的位置优先于connect-string财产。spring-doc.cadn.net.cn

Zookeeper Config 将尝试根据spring.cloud.zookeeper.config.name(默认为spring.application.nameproperty) 和spring.cloud.zookeeper.config.default-context(默认为application).如果要指定上下文而不是使用计算的上下文,则可以将该信息添加到spring.config.import陈述。spring-doc.cadn.net.cn

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

这将选择性地仅从/contextone/context/two.spring-doc.cadn.net.cn

一个bootstrap文件(properties 或 yaml)不需要 Spring Boot Config Data 方法的导入方式spring.config.import.

定制

可以通过设置以下属性来自定义 Zookeeper Config:spring-doc.cadn.net.cn

spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: configuration
        defaultContext: apps
        profileSeparator: '::'
如果您已设置spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=true或包括spring-cloud-starter-bootstrap,则需要将上述值放入bootstrap.yml而不是application.yml.

访问控制列表 (ACL)

您可以通过调用addAuthInfo方法CuratorFramework豆。实现此目的的一种方法是提供您自己的CuratorFrameworkbean,如以下示例所示:spring-doc.cadn.net.cn

@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {

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

}

请查阅 ZookeeperAutoConfiguration 类,了解CuratorFrameworkBean 的默认配置。spring-doc.cadn.net.cn

或者,您可以从依赖于现有CuratorFrameworkbean,如以下示例所示:spring-doc.cadn.net.cn

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

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

}

此 bean 的创建必须在 boostrapping 阶段进行。您可以注册 配置类在此阶段运行,方法是使用@BootstrapConfiguration并将它们包含在您设置为 的值org.springframework.cloud.bootstrap.BootstrapConfiguration属性在resources/META-INF/spring.factories文件,如以下示例所示:spring-doc.cadn.net.cn

resources/META-INF/spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
my.project.CustomCuratorFrameworkConfig,\
my.project.DefaultCuratorFrameworkConfig