springboot加载配置文件优先级
springboot将以如下的顺序 加载配置文件:
1.file: /config/ (是运行jar文件时 所在的目录下的config文件夹中的配置文件
2.file: / (是运行jar文件时所在的目录的同级目录下的配置文件
3.classpath: /config/ (是classpath下的config目录下的配置文件
4.classpath: /(是classpath下的配置文件
注:在maven项目中,resources目录就是默认的classpath
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置文件的内容会覆盖低优先级配置文件内容
spring.config.name
application是默认的配置文件的名字,如果你想改变配置文件的名字,可以使用spring.config.name 来改变 ,如:--spring.config.name=myApplication
spring.config.location
可以增加自定义的配置文件存放目录
spring boot会优先加载我们自定义位置的配置文件
上面说到,高优先级配置文件的内容会覆盖低优先级的内容,但需要注意的是:
如果低优先级存在高优先级没有的属性,就会存在——互补配置。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的
之前有遇到过一个问题:
在写动态添加数据源需求的时候,在idea中配置了spring.config.location,指定了配置文件的路径,指定运行时读取dev配置,同时删除了多数据源的配置改成单数据源,但是在运行的时候还是会读取到多数据源的配置。
导致这种情况的原因是:
程序在运行的时候,会加载到多数据源的配置,但是在指定位置的配置文件中已经删掉了多数据源的配置,
此处,我陷入了一个误区,以为指定了配置文件的位置,springboot就不会读取其他位置的配置,
但是springboot会按照默认优先级加载所有位置的配置文件,
在高优先级文件中没有读取到多数据源配置的情况下,spring boot会按照默认优先级来读取配置,
所以就会读取到我本地resource目录下的配置文件,这里面的多数据源配置我没有删除,就会出现以上情况。