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

  • 相关阅读:
    【转】Reactor与Proactor两种模式区别
    [转] 比较清楚的阻塞与非阻塞和同步与异步
    一眨眼已做开发十年
    【转】Linux CentOS内核编译:下载CentOS源码、编译2.6.32-220的错误(apic.c:819 error 'numi_watchdog' undeclared)
    [转] Makefile经典教程(掌握这些足够)
    [转]centos 下 autoconf版本升级
    centos安装CODEBLOCKS
    【转】linux 编译安装nginx,配置自启动脚本
    Install Qt creator
    LeetCode 983. Minimum Cost For Tickets
  • 原文地址:https://www.cnblogs.com/huojg-21442/p/10490141.html
Copyright © 2011-2022 走看看