对于最新的稳定版本,请使用 Spring Cloud Zookeeper 4.3.0spring-doc.cadn.net.cn

使用 Zookeeper 进行分布式配置

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

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

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

激活

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

使用 Zookeeper 3.4 版时,您需要更改 包含依赖项的方式,如下所述

Spring Boot 配置数据导入

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

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

应用程序属性
spring.config.import=optional:zookeeper:

这将在默认位置“localhost:2181”连接到 Zookeeper。删除optional:如果 Zookeeper 配置无法连接到 Zookeeper,则会导致 Zookeeper Config 失败。要更改 Zookeeper Config 的连接属性,请将spring.cloud.zookeeper.connect-string或将连接字符串添加到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.name属性)和spring.cloud.zookeeper.config.default-context(默认为application).如果要指定上下文而不是使用计算上下文,可以将该信息添加到spring.config.import陈述。spring-doc.cadn.net.cn

应用程序属性
spring.config.import=optional:zookeeper:myhost:2181/contextone;/context/two

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

一个bootstrap文件(属性或 yaml)对于通过导入的 Spring Boot Config Data 方法不需要spring.config.import.

定制

可以通过设置以下属性来自定义 Zookeeper 配置: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