80. Zookeeper 的分布式配置
Zookeeper 提供了一个hierarchical namespace,使 Client 端可以存储任意数据,例如配置数据。 Spring Cloud Zookeeper Config 是配置服务器和 Client 端的替代方案。在特殊的“引导”阶段将配置加载到 Spring 环境中。默认情况下,配置存储在/config
名称空间中。根据应用程序名称和Active配置文件创建多个PropertySource
实例,以模仿 Spring Cloud Config 解析属性的 Sequences。例如,名称为testApp
且配置文件为dev
的应用程序为其创建了以下属性源:
-
config/testApp,dev
-
config/testApp
-
config/application,dev
-
config/application
最具体的属性来源在顶部,最不具体的属性在底部。 config/application
名称空间中的属性适用于所有使用 zookeeper 进行配置的应用程序。 config/testApp
名称空间中的属性仅可用于名为testApp
的服务的实例。
当前在启动应用程序时读取配置。向/refresh
发送 HTTP POST
请求将导致重新加载配置。当前未实现监视配置名称空间(Zookeeper 支持)。
80.1 Activating
包括对org.springframework.cloud:spring-cloud-starter-zookeeper-config
的依赖项将启用自动配置,该自动配置可设置 Spring Cloud Zookeeper Config。
Warning
使用 Zookeeper 3.4 版时,您需要按照here所述更改包含依赖项的方式。
80.2 Customizing
Zookeeper Config 可以通过设置以下属性来自定义:
bootstrap.yml.
spring:
cloud:
zookeeper:
config:
enabled: true
root: configuration
defaultContext: apps
profileSeparator: '::'
-
enabled
:将此值设置为false
将禁用 Zookeeper Config。 -
root
:设置配置值的基本名称空间。 -
defaultContext
:设置所有应用程序使用的名称。 -
profileSeparator
:设置分隔符的值,该分隔符用于在带有配置文件的属性源中分隔配置文件名称。
80.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 类,以了解CuratorFramework
bean 的默认配置。
另外,您可以从依赖于现有CuratorFramework
bean 的类中添加凭据,如以下示例所示:
@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {
public ZookeeperConfig(CuratorFramework curator) {
curator.addAuthInfo("digest", "user:password".getBytes());
}
}
此 bean 的创建必须在 boostrapping 阶段进行。您可以注册配置类以在此阶段运行,方法是使用@BootstrapConfiguration
Comments 它们,并将它们包含在以逗号分隔的列表中,该列表设置为resources/META-INF/spring.factories
文件中org.springframework.cloud.bootstrap.BootstrapConfiguration
属性的值,如以下示例所示:
resources/META-INF/spring.factories.
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
my.project.CustomCuratorFrameworkConfig,\
my.project.DefaultCuratorFrameworkConfig