对于最新的稳定版本,请使用 Spring Cloud Zookeeper 4.3.0! |
使用 Zookeeper 进行分布式配置
Zookeeper 提供了一个分层命名空间,允许客户端存储任意数据,例如配置数据。Spring Cloud Zookeeper
Config 是 Config Server 和 Client 的替代方案。
在特殊的“引导”期间将配置加载到 Spring 环境中
阶段。配置存储在/config
命名空间。倍数PropertySource
根据应用程序的名称和活动
profiles,以模拟 Spring Cloud Config 解析属性的顺序。例如,一个
名称为testApp
并且使用dev
profile 具有以下属性
为它创建的来源:
-
config/testApp,dev
-
config/testApp
-
config/application,dev
-
config/application
最具体的属性来源位于顶部,最不具体的属性来源位于底部。
属性config/application
命名空间适用于使用
zookeeper 进行配置。属性config/testApp
命名空间可用
仅对名为testApp
.
当前在应用程序启动时读取配置。发送 HTTPPOST
请求/refresh
导致重新加载配置。观察配置
命名空间(Zookeeper 支持)也可用。
激活
包括对org.springframework.cloud:spring-cloud-starter-zookeeper-config
使
autoconfiguration 来设置 Spring Cloud Zookeeper Config。
使用 Zookeeper 3.4 版时,您需要更改 包含依赖项的方式,如下所述。 |
Spring Boot 配置数据导入
Spring Boot 2.4 引入了一种通过spring.config.import
财产。这现在是从 Zookeeper 获取配置的默认方式。
要选择性地连接到 Zookeeper 进行配置,请在 application.properties 中设置以下内容:
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
财产。
Zookeeper Config 将尝试从四个自动上下文中加载值,基于spring.cloud.zookeeper.config.name
(默认为spring.application.name
属性)和spring.cloud.zookeeper.config.default-context
(默认为application
).如果要指定上下文而不是使用计算上下文,可以将该信息添加到spring.config.import
陈述。
spring.config.import=optional:zookeeper:myhost:2181/contextone;/context/two
这将选择仅从/contextone
和/context/two
.
一个bootstrap 文件(属性或 yaml)对于通过导入的 Spring Boot Config Data 方法不需要spring.config.import . |
定制
可以通过设置以下属性来自定义 Zookeeper 配置:
spring:
cloud:
zookeeper:
config:
enabled: true
root: configuration
defaultContext: apps
profileSeparator: '::'
-
enabled
:将此值设置为false
禁用 Zookeeper 配置。 -
root
:设置配置值的基本命名空间。 -
defaultContext
:设置所有应用程序使用的名称。 -
profileSeparator
:设置用于分隔配置文件名称的分隔符的值 具有配置文件的属性源。
如果您已将spring.cloud.bootstrap.enabled=true 或spring.config.use-legacy-processing=true ,或包括spring-cloud-starter-bootstrap ,则需要将上述值放在bootstrap.yml 而不是application.yml . |
访问控制列表 (ACL)
您可以通过调用addAuthInfo
方法CuratorFramework
豆。实现此目的的一种方法是提供您自己的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
并将它们包含在您设置为
的值org.springframework.cloud.bootstrap.BootstrapConfiguration
属性中的resources/META-INF/spring.factories
文件,如以下示例所示:
org.springframework.cloud.bootstrap.BootstrapConfiguration=\ my.project.CustomCuratorFrameworkConfig,\ my.project.DefaultCuratorFrameworkConfig