zoukankan      html  css  js  c++  java
  • 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目录下,问题就解决了!

  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/huojg-21442/p/10490141.html
Copyright © 2011-2022 走看看