从零学SpringCloud系列(八):分布式配置中心Spring Cloud Config
一、快速入门
1.1 项目版本
spring boot:2.2.5.RELEASE
spring cloud:Hoxton.SR3
1.2 项目地址
https://github.com/zhenghaoxiao/spring-cloud-in-action/tree/dev
在搭建配置中心的时候,我们需要注意的一个地方就是,在配置客户端的时候,我们需要使用bootstrap.properties,这样config-server中的配置信息才能被正确的加载。具体搭建过程可以参考下面文章:
https://blog.csdn.net/hao134838/article/details/105339907
二、配置详解
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
上面的url会映射{application}-{profile}.properties对应的配置文件,{label}对应git上不同的分支,默认为master。
所以在上面项目中,我们启动config-server工程后,我们可以访问:
http://localhost:7071/config-client/dev 地址得到下面内容
{"name":"config-client","profiles":["dev"],"label":null,"version":"40af4c2ef1ad8ac9a394b8a244396fa303c3e665","state":null,"propertySources":[{"name":"https://github.com/zhenghaoxiao/springcloudconfig/rpo/config-client-dev.properties","source":{"from":"jack-cloud"}}]
}
客户端配置详和git中存储文件中各个部分的对应关系
spring.application.name:对应配置文件规则中的{application}部分
spring.cloud.config.label:对应配置文件规则中{profile}部分
spring.cloud.config.profile:对应配置文件规则中{label}部分
spring.cloud.config.uri=http:对应配置文件规则中config-server的地址
三、服务端详解
3.1 基础架构
3.2 执行流程
1、应用启动时,根据bootstrap.properties中配置的应用名{application}、环境名{profile}、分支名{label},向Config Server请求获取配置信息。
2、Config Server根据自己维护的Git仓库信息和客户端传递过来的配置定位信息去查找配置信息
3、通过 git clone命令将找到的配置信息下载到Config Server的文件系统中。
4、Config Server创建Spring 的ApplicationContext实例,并从Git本地仓库中加载配置文件,最后将这些配置内容读取出来返回给客户端应用。
5、客户端应用在获得外部配置文件后加载到客户端的ApplicationContext实例,该配置内容的优先级高于客户端jar包内部的配置内容,所以在jar中重复内容将不再被加载。
Config Server巧妙的通过 git clone将配置信息存于本地,起到了缓存的作用,即使当git服务端无法访问的时候,依然可以读取C onfig Server中缓存内容进行使用。
3.3 仓库 配置
对于仓库配置config默认采用了git。git非常使用存储配置内容,他可以非常方法的利用各种第三方工具对配置内容进行修改,并且它的Hook功能还可以帮助我们实时监控配置内容的修改。同时,它也支持SVN、本地文件系统等方式进行存储配置内容。
下面我们主要介绍一下使用git作为配置仓库的内容
spring.cloud.config.server.git.uri=https://github.com/zhenghaoxiao/springcloudconfig
spring.cloud.config.server.git.searchPaths=rpo
spring.cloud.config.server.git.username=jack
spring.cloud.config.server.git.password=******
如果我们将uri的值通过file://前缀来设置为一个文件地址,那么它将以本地 仓库的方式运行,这样我们就可以脱离git服务端来快速进行调试与开发,比如:
spring.cloud.config.server.git.uri=file://${user.home}/config-repo
其中{user.home}代表当前用户所属目录。
3.3.1 占位符配置URI
{application}、{profile}、{label}这些 占位符除了用于标识配置文件的规则之外,还可以用于Config Server中对git 仓库地址的URI配置,比如,我们可以通过{application}占位符来实现一个 应用对一个一个git仓库目录的配置效果,具体配置如下:
spring.cloud.config.server.git.uri=https://github.com/zhenghaoxiao/springcloudconfig/{application}
spring.cloud.config.server.git.searchPaths=rpo
spring.cloud.config.server.git.username=jack
spring.cloud.config.server.git.password=******
其中,{application}代表了应用名,所以当客户端应用向Config Server发起获取配置的要求时,Config Server会根据客户端的spring.application.name信息来填充{application}占位符以定位配置 资源的存储位置,从而实现根据微服务应用的属性动态获取不同位置的配置。另外,在这些占位符中,{label}参数较为特别,如果git的分支和标签名包含了“/”,那么{label}参数在http的URL中应该使用“(_)”来代替,以避免改变了uri含义,指向到其他的URI资源。
3.3.2 子目录存储
除了支持占位符配置外,config server还可以将配置文件定位到git仓库的子目录中,我们在快速入门项目中的的配置中有一个配置是
spring.cloud.config.server.git.searchPaths=rpo
对于这个参数的配置也支持使用{application}、{profile}、{label}占位符
3.4 属性覆盖
config server还有一个“属性覆盖”的 特性,他可以让开发人员为所有的应用提供配置属性,只需要通过spring.cloud.config.server.overrides.name属性来设置键值对的参数,这些参数会以map的方式 加载到客户端。
spring.cloud.config.server.overrides.name=didi
通过 该属性配置的参数,不会被spring cloud的客户端修改,并且spring cloud中获取配置的信息时,都会取得这些配置信息。
3.5 服务化配置
服务化配置就是将config server作为一个服务单元纳入到服务中心管理之中,然后通过服务发现来访问config server。这样我们服务端和客户端都需要依赖eureka,加入到eurka服务治理体系,在上面项目中应配置了,大家可以参考一下项目中的配置。
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=config-server
四、动态刷新配置
4.1 手动刷新配置
手动刷新是指,我们修改了git仓库中的配置内容以后, 客户端获取到的内容并不是最新的, 需要我们手动调用一个接口来触发 刷新。我们需要修改客户端项目:
pom 依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
配置文件增加:
management.endpoints.web.exposure.include= health,info,refresh
在需要获得配置文件的类上增加注解:@RefreshScope
@RestController
@RefreshScope
public class TestController {@Value("${from}")private String from;@GetMapping("/test")public String getFrom() {return from;}
}
这样我们修改完远程仓库中的内容手动调用接口:http://localhost:7072/actuator/refresh 即可
4.2 利用git 的webhooks实现自动刷新
1、进入 github 仓库配置页面,选择 Webhooks ,并点击 add webhook;
2、之后填上回调的地址,也就是上面提到的 actuator/refresh 这个地址,但是必须保证这个地址是可以被 github 访问到的。如果是内网就没办法了。这也仅仅是个演示,一般公司内的项目都会有自己的代码管理工具,例如自建的 gitlab,gitlab 也有 webhook 的功能,这样就可以调用到内网的地址了。
五、小结
对于一些简单的项目来说,我们一般都是直接把相关配置放在单独的配置文件中,以 properties 或者 yml 的格式出现,更省事儿的方式是直接放到 application.properties 或 application.yml 中。但是这样的方式有个明显的问题,那就是,当修改了配置之后,必须重启服务,否则配置无法生效。
目前有一些用的比较多的开源的配置中心,比如携程的 Apollo、蚂蚁金服的 disconf 等,对比 Spring Cloud Config,这些配置中心功能更加强大。有兴趣的可以拿来试一试。
在spring cloud 家族中 config也是 足够好用了。。
后续。。。。。
续我们会利用消息总线 Spring Cloud Bus 来实现动态刷新。
从零学SpringCloud系列(八):分布式配置中心Spring Cloud Config相关推荐
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
转载请标明出处: http://blog.csdn.net/forezp/article/details/81041045 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...
- java springcloud版b2b2c社交电商spring cloud分布式微服务 (七)高可用的分布式配置中心(Spring Cloud Config)...
Springcloud b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取 ...
- Java B2B2C o2o多用户商城 springcloud架构 (六)分布式配置中心(Spring Cloud Config)
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)...
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f6-config/ 本文出自方志朋的博客 在上一篇文章讲述z ...
- SpringCloud: 分布式配置中心(Spring Cloud Config)
简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config , ...
- Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配 ...
- java B2B2C Springcloud多租户电子商城系统-(七)高可用的分布式配置中心(Spring Cloud Config)...
讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...
- 企业分布式微服务云SpringCloud SpringBoot mybatis (七)高可用的分布式配置中心(Spring Cloud Config)...
讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...
最新文章
- 【linux】NXP MFGTools工具配置文件详解
- morphia(1)-基础
- 关于创建主键和索引的关系一个小小測试
- (34)内核编程基础
- html固定dl高度_HTML入门笔记1
- shell 获取值 默认值
- 【小记录】关于dojo中的on事件
- 《天天数学》连载18:一月十八日
- 牛客网——约数的个数
- 员工管理系统————员工修改模块
- 对我来说,只有一件事情是重要的
- VISTA组策略中关闭自动播放的位置
- mysql 按照汉字的拼音排序、按照首字母分类
- springcloud config不重启修改配置_SpringCloud实战-Bus消息总线(动态修改配置)
- vue cil安装axios
- POJ 1008 玛雅历
- 104Triangle Area三角面积
- Fluent计算出现“Floating point exception”时的解决办法
- 怎么做好数据可视化(文末送书)
- 广东计算机一级试题答案,广东计算机一级考试试题和答案