SpringBoot外化配置源码解析:Profile处理实现( 二 )
private void load(Profile profile, DocumentFilterFactory filterFactory,DocumentConsumer consumer)getSearchLocat ions(). forEach( (location) -> {boolean isFolder = location endsWith("/");Set names = isFolder ? getSearchNames() : NO_ SEARCH_ NAMES;names . forEach((name) -> load(location, name, profile, filterFactory, consumer));}
在上面的代码中 , 主要通过 getSearchL ocations 方法获得默认的扫描路径 , 如果没有特殊指 定,就 采 用 常 量 DEFAULT_ SEARCH_ LOCATIONS中定义的4个路 径。而getSearchNames 方 法获得的就是 application 这个默认的配置文件名 。 然后 , 逐一遍历加载目录路径及其指定文件名的文件 。
当扫描到符合条件的文件时程序会进行相应的解析操作 , 比如我们将指定 active 的配置放在默认的配置文件中 , 那么第一轮 for 循环就会将该 参数读取出来 , 并添加到 profiles 中 , 并且把 profile 中的 default 配置项移除 。
private void load(PropertySourceLoader loader, String location, Profile prafile,DocumentFilter filter, DocumentConsumer consumer) {try {List
重点看上面代码中 for 循环的操作 , 如果解析配置文件中获得 profile 的配置项 , 会对这些配置项进行再次处理 , 也就是调用 addActiveProfiles 方法 。 addActiveProfiles 方法的代码如下 。
void addActiveProfiles(Set profiles) {//如果未经激活则将其添加到 profiles 队列中this . profiles . addAll(profiles);if (this . logger. isDebugEnabled()) {this. logger. debug("Activated activeProfiles+ StringUtils. collectionToCommaDelimitedString(profiles));// profile 设置被激活this . activatedProfiles = true;//移除未处理的默 profileremoveUnprocessedDefaultProfiles();}
这里会将配置文件中获得的 profile 添加到 profiles 中去 , 并设置 profile 为激活状态 。 最后 , 再调用 removeUnprocessedDefaultProfiles 方 法将默认值移除 。 很显然 , 既然已经获得了指定的 profile 配置,那么程序自动设置的默认值也就失效了 。
最后再看一下 load 方法 中 add oadedPropertySources 方法 , 该方法将加载的配置文件有序地设置到环境中 。 而配置文件有序性也是通过 loaded 的数据结构来实现的 , 在初始化的时候已经看到它是一个 LinkedHashMap 。
【SpringBoot外化配置源码解析:Profile处理实现】private void addL oadedPropertySources() {MutablePropertySources destination = this . environment. getPropertySources();List
一般情况 下 loaded 属性中会存储两个 MutablePropertySources, -一个为默认的 , 一个为通过 active 指定的 , 而 MutablePropertySources 中又存储着 属性配置文件的路径列表 。
通过上面的双层遍历会获得默认的属性配置文件和指定的属性配置文件 , 同时将它们添加到环境中去 。
这里我们从整体了解了 Profile 的操作流程 , 上一 节中已经举例讲解配置文件的解析、加载等过程 , 不在此赘述 。
文章插图
本文给大家讲解的内容是SpringBoot外化配置源码解析基于Profile 的处理实现
- 下篇文章给大家讲解的是SpringBoot外化配置源码解析综合实战;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
- 芯片|华米GTS2mini和红米手表哪个好 参数功能配置对比
- 曝光|OPPO新机曝光,配置强悍颜值动人,“三金影后”为其代言
- 曝光|诺基亚新机定价、配置曝光:4GB/64GB成标配,最低售价1685元
- 一流|妥妥的一流旗舰配置,vivo X系列新机已手握两大“杀器”
- 感人|千元5G手机做成这样了!realmeQ2配置感人诚意满满
- 水桶|红米note9再续神话!价格便宜配置丰富,这才是真正的水桶机
- OPPO将抢发骁龙875芯片!配置强悍:小米11或无缘首发
- 华为P50外观配置全曝光!新5G芯片+歪镜头设计:售价很感人
- R2|「集微拆评」坚果R2评测:旗舰配置加独有功能,手机更好用了
- linux配置nginx定时日志分割