一、快速入门

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相关推荐

  1. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...

  2. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041045 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  3. java springcloud版b2b2c社交电商spring cloud分布式微服务 (七)高可用的分布式配置中心(Spring Cloud Config)...

    Springcloud b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取 ...

  4. Java B2B2C o2o多用户商城 springcloud架构 (六)分布式配置中心(Spring Cloud Config)

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  5. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)...

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f6-config/ 本文出自方志朋的博客 在上一篇文章讲述z ...

  6. SpringCloud: 分布式配置中心(Spring Cloud Config)

    简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config , ...

  7. Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配 ...

  8. java B2B2C Springcloud多租户电子商城系统-(七)高可用的分布式配置中心(Spring Cloud Config)...

    讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...

  9. 企业分布式微服务云SpringCloud SpringBoot mybatis (七)高可用的分布式配置中心(Spring Cloud Config)...

    讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...

最新文章

  1. 【linux】NXP MFGTools工具配置文件详解
  2. morphia(1)-基础
  3. 关于创建主键和索引的关系一个小小測试
  4. (34)内核编程基础
  5. html固定dl高度_HTML入门笔记1
  6. shell 获取值 默认值
  7. 【小记录】关于dojo中的on事件
  8. 《天天数学》连载18:一月十八日
  9. 牛客网——约数的个数
  10. 员工管理系统————员工修改模块
  11. 对我来说,只有一件事情是重要的
  12. VISTA组策略中关闭自动播放的位置
  13. mysql 按照汉字的拼音排序、按照首字母分类
  14. springcloud config不重启修改配置_SpringCloud实战-Bus消息总线(动态修改配置)
  15. vue cil安装axios
  16. POJ 1008 玛雅历
  17. 104Triangle Area三角面积
  18. Fluent计算出现“Floating point exception”时的解决办法
  19. 怎么做好数据可视化(文末送书)
  20. 广东计算机一级试题答案,广东计算机一级考试试题和答案

热门文章

  1. 标签(Tag)的数据库设计
  2. dreamweaver没有中文字体
  3. 如何让技术面试者的面试体验做的更好
  4. 艺术与审美期末考试答案2020
  5. Spring IoC容器的设计—2—主线
  6. 被“文化殖民”的农村
  7. 安全狗受邀亮相第二届工控中国大会
  8. klee 检测漏洞-四个实例
  9. 5分钟快速部署然之协同办公系统
  10. 纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式