spring-cloud-config-源码分析-二


title: spring cloud config 源码分析(二)
date: 2023-04-21 14:33:36
tags

config源码分析

如果config server从数据库中读取数据,config server如何去获取数据。

1.在org.springframework.cloud.config.server包中存在EnviormentController类中,也是通过rest风格去访问。

img

2.我们从游览器访问对应的url,然后再去debug

img

3.在这个位置打个断点,进行debug

img

4.然后会从findOne方法去查找配置,根据对应的label,profiles,name

img

5.进行findOne方法后,继续进行debug

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMjdQjNX-1682067675568)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421145724150.png)]

6.继续debug后,我们发现它会将相关信息 注入到Environment对象中。

在这里插入图片描述

7.最重要的一步就是EnvironmentRepositories这个接口,这是一个接口,我们可以通过这个接口去实现config server如何去获取数据,在findOne方法中,this.environmentRepositories是一个集合,因为有多个类实现该接口,所以Spring在启动的时候会去获取实现该接口的所有类,那么它就是一个接口。

在这里插入图片描述

8.这个类在config server中十分重要,我们可以通过继承这个类去扩展config server通过git,数据库获取数据等其他方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqEE83Iy-1682067675569)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421150815669.png)]
git和数据库便是通过这两个类去查找配置信息的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xgeRvWfL-1682067675569)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421151714688.png)]

9.然后再去判断Spring中实现EnvironmentRepositories的接口有多少个类,然后再去遍历

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lp6b6d10-1682067675569)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421151958951.png)]

如果是多个实现的话,它会去遍历查询然后将获取的配置全部加入到env中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KpXY7FK-1682067675569)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421152059324.png)]

至于它如何去控制Bean加载到spring中仍需要研究

10.我们这里debug只查出this.environmentRepositories.size() == 1,那么我们进入if分支,他去获取第一个Bean然后调用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fj7MgbZA-1682067675570)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421153424694.png)]

这里会新建一个NativeEnvironmentRepository对象,并且获取配置文件和相关环境信息

这里会获取一些元数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbyuIk9K-1682067675570)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421153737281.png)]

11.这里有个getLocaltions方法会去获取,当地文件的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9AWZDhVj-1682067675570)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421153917772.png)]

它会获取你从数据库读取放在本地,然后文件的地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACE18Be4-1682067675570)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421154228412.png)]

12.接着debug,label为空所以,它进入if分支,将label进行赋值,这里是自己实现的,具体分析根据自己debug所得。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLvBJQjb-1682067675571)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421154318281.png)]

我们这里自己实现了使config server分支默认为master

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxuIPXXt-1682067675571)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421154741042.png)]

13.我们接着debug,看看部门大佬如何写的,下面我们来到refresh方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vUtaHs2-1682067675571)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421155151675.png)]

14.我们进入refresh方法,我们来看看它是如何判断的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4YfRwTXN-1682067675571)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421155316071.png)]

这里配置文件可以配置refreshRate刷新频率,这里设置了refreshRate = 600,经过计算十分钟刷新一次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fUKvc6z4-1682067675571)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421155434857.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Cwk7s46-1682067675572)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421155515014.png)]

15.然后我们在进行debug可以看见getWorkingDirectory方法,紧接着cleanDirectory方法会去清理你文件夹中是否含有其他文件,如果含有它就会清理,如何再将查询的数据加入到文件夹中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0q2lpqfx-1682067675572)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421161437897.png)]

16.然后我们会去数据库中读取数据然后利用writeConfig方法将配置文件写入到文件夹中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SofCrezM-1682067675573)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421161837244.png)]

17.它通过jdbcTemplate去获取数据,这里的getsql会去获取表中的所有数据,这里有个existLabels对象,它是一个set数据结构,它用来保存label数据并且将label唯一,然后最后去判断是否存在label标签,如果不存在会抛出一个异常。(用set是为了方便去检索是否存在)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vVF5pEpc-1682067675573)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421162552782.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tazdbO0U-1682067675573)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421162431754.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fY9EEPx-1682067675573)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421163030483.png)]

17.下面我们debug一下writeConfig方法,这个writeStringToFile会将数据创建放入之前的文件夹中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXB6ZnYm-1682067675573)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421163305190.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O9OfxZfT-1682067675574)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421163426385.png)]

18.最后更新一下刷新时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glOkSoVg-1682067675574)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421163529594.png)]

19,返回之后 我们达到refresh方法,检查label类型,返回一个location对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sRrBFBKa-1682067675574)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421163842662.png)]

10,debug之后,来到下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0uMkjGlJ-1682067675574)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421164439077.png)]

我们可以看到findOne方法会去获取相关配置信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wkhIUSd-1682067675574)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421164526336.png)]

11,我们对findOne方法进行debug会发现这个方法会将配置文件放入它里面(核心)在这里插入图片描述

12.我们来到clean方法,它会将刚刚获取的配置信息放入到PropertySource,然后再放入Environment对象中,最后将它返回

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kbj3jNVP-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165100367.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGlyBief-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165231536.png)]

13回调之后我们来到,它将配置文件内容赋值给envRepo,最后依次set进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHEXHEVh-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165400298.png)]

14 再继续回调,我们会来到对环境配置进行解密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8vfekCG-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165656959.png)]

这里会判断它是否设置了加解密,如果设置则进行解密操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-loRQ8JYT-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165736752.png)]

15,再继续回调我们就会发现,它将配置文件返回给客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2pemU8m-1682067675575)(C:\Users\20471\AppData\Roaming\Typora\typora-user-images\image-20230421165931386.png)]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值