springboot加载application资源文件源码分析

    springboot默认支持加载application.properties或者application.yml配置文件,我们有些散落的配置可以统一配置在配置文件中方便管理,这样但不支持动态动态修改,建议配置在zookeeper中,能够支持修改立即生效。
    下面分析springboot默认支持的配置文件:

在分析监听器时,我们知道ConfigFileApplicationListener监听器是用来进行配置资源文件加载的,可以看到其实现了SmartApplicationListener类的supportsEventType方法,它对ApplicationEnvironmentPreparedEvent和ApplicationPreparedEvent两个事件进行了监听。
SpringApplication实例环境准备

所以在环境准备的时候会去触发对应事件,所以在这个时候就会触发配置文件的加载


ConfigFileApplicationListener加载配置文件的代码

postProcessor.postProcessEnvironment(event.getEnvironment(),
event.getSpringApplication())这里会去进行属性值的加载
加载资源文件属性值

将RandomValuePropertySource添加到环境中支持Random类的随机数的配置

Loader(environment, resourceLoader).load()加载资源文件



这里面再看while里面的load方法

再看getSearchLocations()方法
获取配置资源文件路径

首先看CONFIG_LOCATION_PROPERTY(spring.config.location)是否存在配置,无则走默认配置路径DEFAULT_SEARCH_LOCATIONS(classpath:/,classpath:/config/,file:./,file:./config/)然后遍历这四个目录下看是否存在application.properties/yml文件
names.forEach((name) -> load(location, name, profile, filterFactory, consumer)),names配置文件名称数组其实这里只有一个application(默认的配置文件名称),根据路径和名称进行配置文件的解析


根据PropertySourceLoader进行配置文件的加载

这里的PropertySourceLoanders其实是在new Loader构建实例的时候设置的,也就是读取spring.factories文件配置中的PropertiesPropertySourceLoader和YamlPropertySourceLoader分别对properties和yaml文件的解析
PropertiesPropertySourceLoader支持的配置文件后缀
YamlPropertySourceLoader支持的配置文件的后缀

两者覆写的load方法实现如何处理资源为PropertySource对象。

获取完文件后缀后调用loadIntoGroup方法将资源信息转化为PropertySource,其实质为调用PropertySourcesLoader中load方法

最后调用addConfigurationProperties(this.propertiesLoader.getPropertySources())方法将解析过后的资源信息放置进Enviroment中propertySources属性集合中

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容