springboot查找配置文件路径的过程
spring加载配置文件是通过listener监视器实现的,在springboot启动时:
在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicationEvent事件是继承自ApplicationEvent时间的,代码如下:


由于ConfigFileApplicationListener监听器实现了SmartApplicationListener接口,而SmartApplicationListener接口继承了ApplicationListener<ApplicationEvent>接口,所以能监听到上面广播出来的SpringApplicationEvent事件
在ConfigFileApplicationListener中监听事件的方法:


postProcessEnvironment方法是查找application.yml配置文件的入口方法:

在load方法里面才是真正查找配置文件的过程:


ocaltion有多种,可以自行debug:有file:./和file:./config和classpath等目录;
文件类型默认的有四种:properties、xml、yml、yaml
最后查找的具体路径:location + name + "-" + profile + "." + ext
根据拼出来的路径去查找配置文件,一般配置文件都放在classpath目录下面,当读取到classpath目录下的配置文件的时候,程序去加载配置文件:
当加载配置文件时,程序先会读取配置文件的spring.profiles.active属性,确定加载什么环境的配置文件(我是加载dev的):
然后在读取到的配置文件的属性加载到profiles队列中重新加载配置文件,代码如下,所以任何项目都必须现有一个基础的配置文件,如application.yml,然后在这个配置文件里面有一个active属性;
程序会先拿到这个属性,放到profiles属性中,重新去加载配置文件如application-dev.yml,
注:这篇文章是为了解决配置文件找不到而写的,是为了解决问题而写的,主要是解析查找配置文件路径的过程,具体的解析配置文件的过程,读者可以细看源码,最后我也找到了配置文件为什么找不到的原因,主要是因为idea编译时,classpath路径下面没有application.yml文件,复制配置文件到classpath目录下,问题就解决了!
springboot查找配置文件路径的过程的更多相关文章
- 初识TypeScript:查找指定路径下的文件按类型生成json
如果开发过node.js的话应该对js(javascript)非常熟悉,TypeScript(以下简称ts)是js的超集. 下面是ts的官网: https://www.tslang.cn/ 1.环境配 ...
- Python引用模块和查找模块路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...
- linux php安装扩展方法 查找配置文件
如何在linux中查看nginx.apache.php.mysql配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断 1.判断 ...
- springBoot之配置文件的读取以及过滤器和拦截器的使用
前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将 ...
- Python入门之Python引用模块和查找模块路径
#这篇文章主要介绍了Python引用模块和Python查找模块路径的相关资料,需要的朋友可以参考下 模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的, ...
- linux中查看nginx、apache、php、mysql配置文件路径的方法
如何在Linux中查看nginx.apache.PHP.MySQL配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断1.判断a ...
- SpringBoot | 读取配置文件信息
server.port=8081 #修改端口号 server.servlet.context-path= /SpringBoot #修改URL #自定义配置 tz.name = xiaoming tz ...
- Spring——ClassPathXmlApplicationContext(配置文件路径解析 1)
ClassPathXmlApplicationContext 在我的 BeanFactory 容器文章中主要提及了 BeanFactory 容器初始化(Spring 配置文件加载(还没解析)) ...
- SpringBoot读取配置文件源码探究
1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...
随机推荐
- C#中如何动态加载DockPanel
在WinForm项目中要求实现动态加载DockPanel. 简单研究了下,演示代码如下: 很简单几行代码,实现了基本意图.看起来问题很快解决. 但是实际应用中发现几个问题: 1.当第一次运行时,doc ...
- C# 5 in a Nutshell - Delegate
1. What is delegate in C#? A delegate is an object that knows how to call a method.A delegate type d ...
- npm install 报错:node-pre-gyp ERR! 问题解决
npm install报错问题解决 问题: E:\CodeSpace\GitlabTest\desktop>npm install > lifeccp-desktop@1.1.9 post ...
- 【转】Struts2 和 Spring MVC对比
1. 实现机制 struts2框架是类级别的拦截,每次来了请求就创建一个controller中对应的Action,然后调用setter getter方法把request中的数据注入 .struts2实 ...
- 最小公倍数 【杭电-HDOJ-1108】 附题+具体解释
/* 最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- Android开发之应用程序更新实现
近期给项目app做升级.对Android应用程序更新稍有研究,分享一下我的心得. 既然是更新,那么一定是要联网和下载的.所以联网和存储訪问权限时一定要有的: <!-- 权限申请 --> ...
- marquee.js
图片无缝滚动工具类 CreateTime--2018年3月7日17:11:03 Author:Marydon /** * 图片无缝滚动 * @description * 将要滚动的图片复制一份作为 ...
- Hibernate HQL详解
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5606444.html 1.实体查询: hql="FROM ...
- hibernate session的load和get方法
@Test public void testLoad() { Session session = sessionFactory.getCurrentSession(); session ...
- Qt for Android 开发大坑
Qt for Android 开发大坑 作者: qyvlik Qt 5.5.1 这里说一说比較常见的 Qt 开发安卓的大坑. 希望同学们不要做无谓的挣扎,跳过这些坑. 输入框 首当其冲的是输入框,Qt ...