Springboot:2.1.1版本启动配置文件源码解析

本文主要是通过debug来查看Springboot启动时如何加载resources目录下的配置文件:
SpringBoot刚开始执行的是SpringApplication类的run方法
在这里插入图片描述这个最终获得的environment对象就是我们在resources目录下配置的文件信息;

我们通过一个线程执行的过程来查看具体经过哪些类和方法:
ConfigFileApplicationListener类是Springboot获取配置文件的核心类,具体执行流程如下:
1、load()方法执行
在这里插入图片描述

第一个红框是获取profiles配置是测试还是预发
第二个红框是获取第一个需要加载的配置文件application.yml
第三个红框是根据application.yml文件中的spring.profiles.active:test来查找application-test.xml文件,这个application-{profiles}.xml是固定形式

第二个红框具体实现如下:
在这里插入图片描述getSearchLocations()方法主要是获取配置文件路径:通过这段forEach循环代码中我们可以看到是把每个取出的路径进行循环遍历

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

在这里插入图片描述loader.getFileExtensions()方法获取后缀然后进行遍历,所以这是一个双循环,文件路径遍历然后再进行配置文件后缀名遍历,直到找到对应路径下的application.*(就是我们resources下所配置的文件,application是必须要这个名称,后缀就是下面所包含的任一后缀都可以查找到)文件
Springboot可以识别的四种配置文件后缀:
“properties”, “xml”,“yml”, “yaml”
debug代码如下:
在这里插入图片描述 PropertySourceLoader接口类的getFileExtensions()方法可以获得后缀字符串数组,主要是从两个实现类获取,分别是PropertiesPropertySourceLoader和YamlPropertySourceLoader类。
第三个红框具体实现如下:
执行流程是首先还是从getSearchLocations()获取默认的路径进行遍历,寻找application.yml文件中配置的需要加载的文件,例如application-test.yml,这个过程跟寻找application.yml类似,都是通过遍历来寻找文件(路径和后缀组合的方式),直到在对应路径下找到对应的文件才开始继续往下执行

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

在这里插入图片描述在这里插入图片描述
获得配置信息后存储到对象中,方便后续调用;
这有一个链接,我看了下对springboot源代码执行步骤分析的比较透彻,可以参考看下:
https://www.cnblogs.com/lay2017/p/11478742.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值