Zookeeper 提供了一个分层命名空间,允许客户端存储任意数据,例如配置数据。Spring Cloud Zookeeper Config 是 Config Server 和 Client 的替代方法。 在特殊的“引导”期间,配置被加载到Spring环境中 阶段。默认情况下,配置存储在命名空间中。根据应用程序的名称和活动实例创建多个实例 配置文件,以模拟解析属性的 Spring Cloud Config 顺序。例如,一个 名称为 和 配置文件的应用程序具有以下属性 为它创建的源:/configPropertySourcetestAppdev

  • config/testApp,dev

  • config/testApp

  • config/application,dev

  • config/application

最具体的属性源位于顶部,最不具体的属性源位于底部。 命名空间中的属性适用于使用 zookeeper 进行配置。命名空间中的属性可用 仅适用于名为 . 的服务实例。config/applicationconfig/testApptestApp

当前在应用程序启动时读取配置。发送 HTTP 请求会导致重新加载配置。观看配置 命名空间(Zookeeper 支持)也可用。POST/refresh

激活

包括对 enables 的依赖 设置 Spring Cloud Zookeeper Config 的自动配置。org.springframework.cloud:spring-cloud-starter-zookeeper-config

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

Spring Boot 配置数据导入

Spring Boot 2.4 引入了一种通过属性导入配置数据的新方法。现在,这是从 Zookeeper 获取配置的默认方式。spring.config.import

若要选择性地连接到 Zookeeper 进行配置,请在 application.properties 中设置以下内容:

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

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

Zookeeper Config 将尝试根据 (默认为属性的值) 和 (默认为 ) 从四个自动上下文中加载值。如果要指定上下文而不是使用计算的上下文,则可以将该信息添加到语句中。spring.cloud.zookeeper.config.namespring.application.namespring.cloud.zookeeper.config.default-contextapplicationspring.config.import

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

这将选择仅从 和 加载配置。/contextone/context/two

通过 导入的 Spring Boot Config Data 方法不需要文件(properties 或 yaml)。bootstrapspring.config.import
通过 导入的 Spring Boot Config Data 方法不需要文件(properties 或 yaml)。bootstrapspring.config.import

定制

可以通过设置以下属性来自定义 Zookeeper 配置:

spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: configuration
        defaultContext: apps
        profileSeparator: '::'
  • enabled:设置此值将禁用 Zookeeper 配置。false

  • root:设置配置值的基本命名空间。

  • defaultContext:设置所有应用程序使用的名称。

  • profileSeparator:设置用于分隔配置文件名称的分隔符值 具有配置文件的属性源。

如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml
如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml

访问控制列表 (ACL)

您可以通过调用 Bean 的方法为 Zookeeper ACL 添加认证信息。实现此目的的一种方法是提供自己的 Bean,如以下示例所示:addAuthInfoCuratorFrameworkCuratorFramework

@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {

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

}

请查阅 ZookeeperAutoConfiguration 类,了解 Bean 的缺省配置。CuratorFramework

或者,您可以从依赖于现有 Bean 的类添加凭据,如以下示例所示:CuratorFramework

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

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

}

此 Bean 的创建必须在 boostrapping 阶段进行。您可以注册 在此阶段运行的配置类,方法是用它们进行注释并将它们包含在逗号分隔的列表中,该列表设置为 文件中属性的值,如以下示例所示:@BootstrapConfigurationorg.springframework.cloud.bootstrap.BootstrapConfigurationresources/META-INF/spring.factories

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