SpringBoot应用集成etcd配置源

1 条评论

在分布式、云化的系统里,应用的配置(尤其是依赖服务的配置、环境相关的配置)都存储到应用的本地配置文件里会给维护带来很大的麻烦,而且 docker 更是将应用本身做成了镜像,更难以在本地的配置文件里去存储一些部署环境相关的信息。所以通常在整个系统里会有一个公共的配置服务,配置服务统一集中地维护其他系统的配置信息,再通过网络分发。Spring Cloud Config 就是 Spring 推出的解决方案,不过在自己的应用里还不想为此再起 Java 进程,就选择了较为轻量级的 etcd 来作为配置服务。集成过程如下:

1. 添加 Spring Cloud Etcd 依赖(还没有正式发布版本)

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-etcd-config</artifactId>
  <version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>

2. 指定当前的应用名称

在 application.properties 里增加

spring.application.name=pink

3. 在 etcd 上配置数据

在 etcd 的 /config/application 或者 /config/{application.name} 两个节点下,添加类似于 key=value 的子节点数据即可。

Spring Cloud Etcd 注册了 Bootstrap Configuration,这些 Java Config 类会被 Spring Boot 应用在 bootstrap 阶段加载,而 Spring Cloud Etcd 就在此时向 bootstrap ApplicationContext 里注册了 EtcdPropertySourceLocator,在 Spring Boot 应用的 ApplicationContext refresh 之前, Spring Boot 应用本身会注册一个 PropertySourceBootstrapConfiguration,这是一个 ApplicationContextInitializer,他负责找出所有的 PropertySourceLocator,并允许这些 PropertySourceLocator 去初始化 Environment,EtcdPropertySourceLocator 就在此时构造了基于 etcd 实现的 EtcdPropertySource(默认请求 http://localhost:4001),并添加到了 Environment 里,此后 Spring Boot 应用初始化过程中就完全不再感知配置的加载,从 Environment 里获取即可。

相关日志 Relate Posts

收藏与分享 : Twitter | Facebook | 微博 | 人人 | Google+ | PDF

“SpringBoot应用集成etcd配置源”1条留言

  1. 请问有demo可以借鉴吗?

发表留言(Ctrl+Enter提交)