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目录下,问题就解决了!

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WebStorm使用 webstorm快捷键

    WebStorm使用 webstorm快捷键WebStormWebStorm是JetBrains推出的一款商业的 JavaScript 开发工具任何一个编辑器都需要保存(ctrl+s),这是所有win平台上编辑类软件的特点,但是webstorm编辑文件右上角是没有那个熟悉的*的。好处:省去了ctrl+s之后,在结合Firefox的vim,基本不动鼠标就可以看到结果页面了。 坏处:没有以前的*

    2022年6月23日
    39
  • php三个数从大到小排列_php常用的流程控制语句

    php三个数从大到小排列_php常用的流程控制语句<?php$a = rand(100,999);$b = rand(100,999);$c = rand(100,999);echo “a=”.”$a”.”<br>”;echo “b=”.”$b”.”<br>”;echo “c=”.”$c”.”<br>”;if(($a > $b ) && ($a > …

    2022年8月18日
    12
  • 怎么退出vi编辑界面_centos保存退出vim

    怎么退出vi编辑界面_centos保存退出vim@Linux基础学习如何退出vi编辑页面background今天在虚拟机上练习如何自动挂载的时候,按照提示在命令行输入vi/etc/fstab,如下图:回车之后进入编辑器界面,如图:由于误操作将这个编辑器内的内容修改了,可是我并不想修改任何内容,然后摸索半天也不知道如何撤销修改,或者说不保存退出,于是我在网上寻找到了一些答案。方法网上的方法是按ESC键跳到命令模式,但我在我的虚…

    2022年9月29日
    5
  • 直接加QQ好友的链接或会话的方法

    出自本博客:qq_2300688967原文链接:https://blog.csdn.net/qq_2300688967/article/details/52162230下面是两种方法,一种直接会话,一种添加好友,只需将本人的QQ改成自己的就行了(1)下面这个代码,可直接临时会话tencent://message/?Menu=yes&amp;uin=2300688967&amp;…

    2022年4月9日
    130
  • idea启动tomcat控制台乱码_idea tomcat 乱码

    idea启动tomcat控制台乱码_idea tomcat 乱码找到你的tomcat的安装目录,如下图,找到conf下的logging.properties文件用notepad++等工具打开logging.properties文件,找到内容为java.util.logging.ConsoleHandler.encoding=UTF-8这一行,在前面加#注释掉该行,并保存,重新启动tomcat,你就会发现已经修改成功了,如下图注:如果还没有解决,…

    2022年9月26日
    7
  • C++ eigen_c++第三方库

    C++ eigen_c++第三方库前言Eigen就是一个线性代数的C++库。它对矩阵(MatrixMatrix)和向量(VectorVector)等相关线性代数的运算操作进行了比较系统的实现。一、矩阵1.定义矩阵模板函数共包含六个参数template<typename_Scalar,int_Rows,int_Cols,int_Options,int_MaxRows,int_MaxC…

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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