springboot启动时是如何加载配置文件application.yml文件

springboot启动时是如何加载配置文件application.yml文件今天启动springboot时,明明在resources目录下面配置了application.yml的文件,但是却读不出来,无奈看了下源码,总结一下springboot查找配置文件路径的过程,能力有限,欢迎各位大牛指导!!!spring加载配置文件是通过listener监视器实现的,在springboot启动时:在容器启动完成后会广播一个SpringApplicationEvent事件,而Spri…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天启动springboot时,明明在resources目录下面配置了application.yml的文件,但是却读不出来,无奈看了下源码,总结一下springboot查找配置文件路径的过程,能力有限,欢迎各位大牛指导!!!

spring加载配置文件是通过listener监视器实现的,在springboot启动时:

springboot启动时是如何加载配置文件application.yml文件

在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicationEvent事件是继承自ApplicationEvent时间的,代码如下:

springboot启动时是如何加载配置文件application.yml文件

springboot启动时是如何加载配置文件application.yml文件

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

springboot启动时是如何加载配置文件application.yml文件

SmartApplicationListener是继承自ApplicationListener:

springboot启动时是如何加载配置文件application.yml文件

在ConfigFileApplicationListener中监听事件的方法:

springboot启动时是如何加载配置文件application.yml文件

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

springboot启动时是如何加载配置文件application.yml文件

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

springboot启动时是如何加载配置文件application.yml文件

默认先读取的是location,然后是配置文件的名字“application”,最后才是文件类型“properties”或者“yml”;

localtion有多种,可以自行debug:有file:./和file:./config和classpath等目录;

文件类型默认的有四种:properties、xml、yml、yaml

最后查找的具体路径:location + name + “-” + profile + “.” + ext

springboot启动时是如何加载配置文件application.yml文件

根据拼出来的路径去查找配置文件,一般配置文件都放在classpath目录下面,当读取到classpath目录下的配置文件的时候,程序去加载配置文件:

springboot启动时是如何加载配置文件application.yml文件

springboot启动时是如何加载配置文件application.yml文件

当加载配置文件时,程序先会读取配置文件的spring.profiles.active属性,确定加载什么环境的配置文件(我是加载dev的):

springboot启动时是如何加载配置文件application.yml文件

然后在读取到的配置文件的属性加载到profiles队列中重新加载配置文件,代码如下,所以任何项目都必须现有一个基础的配置文件,如application.yml,然后在这个配置文件里面有一个active属性;

springboot启动时是如何加载配置文件application.yml文件

程序会先拿到这个属性,放到profiles属性中,重新去加载配置文件如application-dev.yml,程序如下:

springboot启动时是如何加载配置文件application.yml文件

springboot启动时是如何加载配置文件application.yml文件

注:这篇文章是为了解决配置文件找不到而写的,是为了解决问题而写的,主要是解析查找配置文件路径的过程,具体的解析配置文件的过程,读者可以细看源码,最后我也找到了配置文件为什么找不到的原因,主要是因为idea编译时,classpath路径下面没有application.yml文件,复制配置文件到classpath目录下,问题就解决了!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196486.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 2020最火的编程语言_2020年牛会掉价吗

    2020最火的编程语言_2020年牛会掉价吗大学新生看过来。

  • Ubuntu之cudnn安装

    Ubuntu之cudnn安装一、cudnn简介二、安装步骤

  • Maven 配置环境变量后无法立刻生效「建议收藏」

    Maven 配置环境变量后无法立刻生效「建议收藏」    最近在系统学习Maven,在解压完Maven,并配置环境变量后,在黑窗口用mvn-n查询不到。   仔细研究后发现,我在配置环境变量之前就打开了黑窗口,导致无法查到最新的,所以只要重新打开黑窗口就能查到了。…

  • 作业总结:磨皮滤镜(双边滤波bilateralFilter)代码实现[通俗易懂]

    作业总结:磨皮滤镜(双边滤波bilateralFilter)代码实现[通俗易懂]双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数.1Python:cv2.bilateralFilter(src,d,sigm…

  • 目标检测与图像分割的区别_语义分割和实例分割最新论文

    目标检测与图像分割的区别_语义分割和实例分割最新论文计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?1、ImageClassification(图像分类)图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和do…

  • 计算机网络中广域网和局域网_广域网接入技术有哪些

    计算机网络中广域网和局域网_广域网接入技术有哪些 局域网与广域网   局域网(LocalAreaNetwork,LAN)是将分散在有限地理范围内的多台计算机通过传输媒体连接起来的通信网络,通过功能完善的网络软件,实现计算机之间的相互通信和资源共享;广域网(WideAreaNetwork,WAN)是在传输距离较长的前提下所发展的相关技术的集合,用于将大区域范围内的各种计算机设备和通信设备互联在一起,组成一个资源共享的通信网络。 …

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号