78. 使用 Zookeeper 分发 Configuration
Zookeeper 提供了一个分层命名空间,它允许 clients store 任意数据,例如 configuration 数据。 Spring Cloud Zookeeper Config 是配置服务器和 Client的替代品。 Configuration 在特殊的“bootstrap”阶段加载到 Spring 环境中。 Configuration 默认存储在/config
命名空间中。基于 application 的 name 和 active profiles 创建多个PropertySource
实例,以模仿解析 properties 的 Spring Cloud Config order。对于 example,具有 name testApp
和dev
profile 的 application 具有为其创建的以下 property 源:
-
config/testApp,dev
-
config/testApp
-
config/application,dev
-
config/application
最具体的 property 源位于顶部,底部最不具体。 config/application
名称空间中的 Properties 适用于使用 zookeeper 进行 configuration 的所有 applications。 config/testApp
名称空间中的 Properties 仅适用于名为testApp
的服务的实例。
Configuration 目前在启动 application 时读取。将 HTTP POST
请求发送到/refresh
会导致重新加载 configuration。目前尚未实现_Coniguration 命名空间(Zookeeper 支持)。
78.1 激活
包含对org.springframework.cloud:spring-cloud-starter-zookeeper-config
的依赖启用自动配置_set Spring Cloud Zookeeper Config。
使用 Zookeeper 的 version 3.4 时,您需要更改包含依赖关系的方式,如这里所述。
78.2 自定义
可以通过设置以下 properties 来自定义 Zookeeper 配置:
bootstrap.yml.
spring:
cloud:
zookeeper:
config:
enabled: true
root: configuration
defaultContext: apps
profileSeparator: '::'
-
enabled
:将此 value 设置为false
会禁用 Zookeeper 配置。 -
root
:设置 configuration 值的基本命名空间。 -
defaultContext
:设置所有 applications 使用的 name。 -
profileSeparator
:设置用于将 property 源中的 profile name 与 profiles 分隔开的分隔符的 value。
78.3 访问控制列表(ACL)
您可以通过调用CuratorFramework
bean 的addAuthInfo
方法为 Zookeeper ACL 添加身份验证信息。实现此目的的一种方法是提供自己的CuratorFramework
bean,如下面的示例所示:
@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {
@Bean
public CuratorFramework curatorFramework() {
CuratorFramework curator = new CuratorFramework();
curator.addAuthInfo("digest", "user:password".getBytes());
return curator;
}
}
请参阅ZookeeperAutoConfiguration class以查看CuratorFramework
bean 的默认 configuration。
或者,您可以从依赖于现有CuratorFramework
bean 的 class 添加凭据,如以下 example 所示:
@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {
public ZookeeperConfig(CuratorFramework curator) {
curator.addAuthInfo("digest", "user:password".getBytes());
}
}
这个 bean 的创建必须在 boostrapping 阶段进行。您可以在此阶段将 configuration classes 注册到 run,方法是使用@BootstrapConfiguration
注释它们并将它们包含在 comma-separated 列表中,并将其设置为resources/META-INF/spring.factories
文件中org.springframework.cloud.bootstrap.BootstrapConfiguration
property 的 value,如下面的示例所示:
resources/META-INF/spring.factories.
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
my.project.CustomCuratorFrameworkConfig,\
my.project.DefaultCuratorFrameworkConfig