Spring Cloud Config(Dalston.SR5)
特点
- 集中管理
- 不同环境不同配置
- 运行期间动态调整配置
- 自动刷新
同类项目
- apollo (携程)
- diamond(阿里)
- disconf(百度)
- zookeeper
- spring cloud consul
URL访问
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
结合Git基本使用
- client 通过用 uri / profile / label/ application.name等信息去 config server 请求配置属性
- config server根据client提供的信息按约定的匹配从git repo加载相应配置,返回client
1 | config server配置application.yml |
1 | config client配置bootstrap.yml |
结合DiscoveryClient(Eureka)
- config server 注册到eureka server
- config client 启用discovery,并配置config server在注册中心的service-id
- config client 配置profile/label/application.name找到config server获取配置
1 | config server配置application.yml |
1 | config client配置bootstrap.yml |
加解密
- 相对config server和 git repo之间,跟config client无关
- 非对称加密需生成一个keystore, 如server.jks,放到classpath
1 | # 都是在confg server 的application.yml中配置 |
1 | # 创建一个key store |
- 使用步骤:
- 通过 $ curl localhost:8888/encrypt -d mysecret加密mysecret名文获得密文
- 加{cipher}前缀,放入git repo相应文件中
- config server获取git repo解密后发送给config client,对client透明
- git中在*.properties中的需要加密的values不能被引号包裹,否则不能被解密
- git中在*.yml中要加单引号
1 | *.yml中 |
本地文件系统(classpath)
1 | config server 的 application.yml |
1 | config client 的bootstrap.yml |
手动刷新
- add spring-boot-starter-actuator
- 在需要支持刷新重新加载的bean上,如包含 @Value(“${profile}”) 的Controller上加 @RefreshScope注解
- 在更改git repo配置提交后,访问config client
- $ curl -X POST Http://localhost:7788/refresh端点手动刷新,原理失效配置缓存
- 参考Refresh Scope
自动刷新(spring cloud bus)
- 在手动刷新配置的基础上
- add spring-cloud-starter-bus-amqp
1 | config client的application.yml |
- $ curl -X POST Http://localhost:7788/bus/refresh
- 向一个config client发送刷新事件,同时传播给基于rabbitmq的spring cloud bus,bus再广播给all clients
- 实现自动刷新步骤为:将该bus刷新url配置给git repo的webhook回调
- 即当每次向git repo进行提交后使用webhook回调进行刷新