SpringBoot的jar包加载配置文件顺序以及启动日志加载配置分析

197 阅读1分钟

一、优先级顺序排序

添加图片注释,不超过 140 字(可选)

假设我们使用springboot打了一个jar包,上面的图说明如下:

外部:

1:先加载和jar包在同一目录的config文件夹下的配置文件

2:第二加载和jar包在同一目录的配置文件

内部:

3:第三加载jar包反编译后的BOOT-INF/classes/config/下的配置文件

4:第四加载jar包反编译后的BOOT-INF/classes/下的配置文件

注:BOOT-INF/classes/config目录,其实就是源代码中resources目录下的config;BOOT-INF/classes/目录就是源代码中resources目录。

二、启动日志加载配置分析

  • 背景:最近遇到的logback.xml加载问题,在外部引入的logback.xml中定义了某个类的输出,但是日志启动的时候没有打印相关的信息,而程序完全启动后在会有相关信息
  • 分析:根据输出日志的信息

INFO in ch.qos.logback.classic.LoggerContent[default]-Found resource [logback.xml] at [jar:file:/appl/gap-ngix/agent/gap-agent.jar!/BOOT-INF/classes!/logback.xml]

可以看到,启动日志初就加载配置文件了,加载到是内部的上面的4。

  • 原因: springboot在启动初,会加载内部的logback.xml,完全启动后,才会加载外部的logback.xml,所以最好保持两者一致
  • 待解决:不知道为啥加载内部的是上面的4,而不是3,这个感觉需要看springboot的源码了,另外,启动日志一般作用不是很大,保证启动后加载正确的logback.xml 一般就满足很大需求了。