以下部分纯属个人理解,但是结果都是经过demo验证。

一、spring cloud config介绍

  spring cloud是spring家族中的一个微服务工具包,其中包含了很多微服务的工具。偏向于与spring boot类似的配置方式,有许多许多默认配置。spring cloud config是其中的一个工具包,用于配置的拉取更新。

  举一个小小的例子,当我们程序中有一个配置文件需要修改,但是服务已经启动,配置文件中的配置已经读取到内存中,为了修改配置,我们需要重启服务;如果是一台或者几台机器重启,还算容易,但是如果是一个集群,重启就变成一个非常耗时的工作;如果我们使用spring cloud config,就可以在服务运行时,拉取git(svn等,下面以git为例)的配置,修改内存中的配置。

二、spring cloud config逻辑介绍

  config-server:提供对git的连接,配置拉取,这里的拉取是被动拉取。

  config-client:连接config-server,通过URI请求对应的配置文件,获取配置属性

  如图表示client从server拉取配置的过程:

  

  1、client根据配置向server发送配置请求

  2、server根据配置从git拉取所有文件(git clone的过程)

  3、git将整个仓库下发

  4、server解析client的URI请求,返回相应的配置属性或者错误信息(不存在相应的配置属性)

  如图表示client发送刷新配置请求的过程:

  1、client向server发送refresh请求

  2、server向从git更新本地配置(git pull)

  3、git下发更新

  4、server对比更新,发现client需要的配置有更新时,会将更新信息发给client

理解:1、在client第一次向server发送URI请求时,server会根据配置的git地址,拉取对应仓库的所有文件(与git clone@{git adress})(在config-server本地/tmp目录下可以找到git本地仓库);

   2、值得注意的是,在client发送刷新配置请求(refresh)时,server会根据本地仓库的情况处理:

     (1)如果server本地仓库有未提交的commit和未commit的修改时,server就不会从git上拉取更新(不会git pull),只会将本地仓库中对应的配置属性传给client;

     (2)如果server本地仓库没有任何修改和commit,server会从git上拉取更新(git pull),然后将本地仓库对应的配置属性传给client。

   3、还有一个坑点,我在demo测试过程中发现,如果git仓库过大,拉取过程很长,在server拉取的时候会出错(有一个最大等待时长,超过会出现超时错误)。为了实现大的二进制文件的正常拉取,可以切到本地仓库地址,手动拉取一次更新。

     (1)在创建本地仓库时就采用手动拉取的方式:在配置文件application.properties中,设置git的url地址为本地文件地址,初始化时,手动git clone远程仓库地址到设置的本地文件地址。在更新配置的时候,config-server也会自动从远程拉取更新。

     (2)如果是更新的时候有大文件的修改导致不能拉取更新:application.properties配置文件中git的url为远程仓库地址,初始化时能够自动拉取,如果有大文件更新,利用git工具,手动切到本地/tmp目录下,利用git命令手动拉取更新就可以拉取大文件的更新,在之后的小文件更新中,config-server就能够正常自动更新。

总之就是,client向server发送一个URI请求:“我要**属性,你那里有吗?”,然后server根据自身的配置,拉取git仓库,然后去找client需要的那个属性,然后告诉client:“我这里有(没有)这个属性,(有就给client)”;刷新过程就是,client向server发送一个URI请求:“我请求的属性值变了吗?”,然后server处理之后,回复client:“变了,这是新的值。(没变)”。

三、配置文件介绍

1、client配置文件如下:

spring.application.name = test                              1
spring.cloud.config.lable = master 2
spring.cloud.config.profile = dev 3
spring.cloud.config.uri = http://localhost:8881/    4

解释:1和3组成了访问的配置文件名,如test-dev.properties

   2决定了git的分支,此处为master分支

   4表示config-server的地址

请求的URI就是由这个配置决定的,网上关于这点的说明很多,此处不再赘述

2、server配置文件如下:

spring.cloud.config.server.git.uri = https://github.com/lucknot/songxh_scse/    1
spring.cloud.config.server.git.searchPaths = test                    2

解释:1表示git仓库的地址,这里是我的github仓库地址(并没有干货)

   2表示配置搜索的文件夹,在client请求配置时,只会在这个文件夹下进行搜索

事实上将1和2拼接在一起就组成了搜索配置属性的URL地址。

针对配置文件需要说明以下,label表示的分支只与client的配置相关:client中配置的是哪个分支就取哪个分支的配置

ps:在写这篇博客的时候突然想到一个问题,client在像server请求时是否只是请求需要的属性的值,还是请求对应的属性文件。个人感觉是取对应文件名的配置文件,在client拿到配置文件后再将读取对应的属性,与spring boot中从配置文件中读取属性类似(事实上就是两个上下文,spring cloud的上下文有高优先级)。

对spring cloud config的一点理解的更多相关文章

  1. Spring Cloud Config Server 节点迁移引起的问题,请格外注意这一点!

    前言: 虽然强烈推荐选择使用国内开源的配置中心,如携程开源的 Apollo 配置中心.阿里开源的 Nacos 注册&配置中心. 但实际架构选型时,根据实际项目规模.业务复杂性等因素,有的项目还 ...

  2. Spring Cloud Config原码篇(十)

    上篇中说到通过@Value注解获取配置中心的内容进行注入,要想了解这个就要知道spring Environment原理,关于这原理我看了下网上分析的文章:https://blog.csdn.net/t ...

  3. spring cloud config git库文件搜索顺序

    spring.cloud.config.server.git.uri只配置到仓库那一层就行了,需要访问仓库的子目录的话就配置spring.cloud.config.server.git.searchP ...

  4. 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  5. Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Clou ...

  6. Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!

    本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...

  7. Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config

    目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...

  8. 使用Spring Cloud Config统一管理配置,别再到处放配置文件了

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 可配置是一个成熟软件系统应该提供的特性,而配置管理对于大型系统就显得十分重要,特别是对于拥有多个应用的微服务系统.可喜的是, ...

  9. Spring Cloud Config应用篇(九)

    一.SpringCloud Config 配置中心 1.1.配置中心说明 SpringCloud Config 服务器以下简称"配置中心". Spring Cloud Config ...

随机推荐

  1. Oracle 表操作(转)

    1.增加新字段:alter table table_name add (name varchar(20) default 'http://www.zangjing.net/');. 2.修改表字段:a ...

  2. fedora添加ntfs文件系统支持

    ntfs支持(安装后不能打开,重启) 如果没有换源先看一下换源. 查找库中是否有ntfs-3g. [root@bogon zhujikuan]# yum search ntfs 上次元数据过期检查:0 ...

  3. nginx服务器开启缓存、反向代理

    一.反向代理配置 1.反向代理服务器配置如下 反向代理就是需要这一行proxy_pass来完成.当我们要访问后端web服务器的时候,我们只需要访问代理服务器就可以了,此时代理服务器就充当后端web服务 ...

  4. zTree异步加载展开第一级节点

    在 setting 中的 callback 中加上 onAsyncSuccess:onAsyncSuccess 回调函数 , 然后实现回调函数 var isFirst = true;function ...

  5. Find a way

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  6. go标准库的学习-text/template

    参考:https://studygolang.com/pkgdoc 导入方式: import "text/template" template包实现了数据驱动的用于生成文本输出的模 ...

  7. javax.servlet.http.HttpServlet" was not found on the Java Build Path

    问题解决(以maven为例): 只需在pom.xml导入对应的两个依赖即可解决该问题: <dependency> <groupId>javax.servlet.jsp</ ...

  8. JDBC使用MYSQL的LOAD DATA LOACAL INFILE和LOAD DATA INFILE

    MYSQL的LOAD方法都必须建立在mysql服务允许使用该命令的情况下: 开启该命令的方法: 1.在实例对应的my.cnf(windows为my.ini)中添加一行local-infile=1(默认 ...

  9. mysql无法远程连接到数据库解决方法

    ERROR 1130: Host ’xxx.xxx.xxx.xxx′ is not allowed to connect to this MySQL server这是告诉你没有权限连接指定IP的主机, ...

  10. 每个大主播都是满屏弹幕,怎么做到的?Python实战无限刷弹幕!

    anmu 是一个开源的直播平台弹幕接口,使用他没什么基础的你也可以轻松的操作各平台弹幕.使用不到三十行代码,你就可以使用Python基于弹幕进一步开发.支持斗鱼.熊猫.战旗.全民.Bilibili多平 ...