springboot加载配置文件优先级

springboot将以如下的顺序 加载配置文件:

1.file:   /config/  (是运行jar文件时 所在的目录下的config文件夹中的配置文件

2.file:  /       (是运行jar文件时所在的目录的同级目录下的配置文件

3.classpath:  /config/  (是classpath下的config目录下的配置文件

4.classpath:  /(是classpath下的配置文件

注:在maven项目中,resources目录就是默认的classpath

 

 

 

详细请见:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config

以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置文件的内容会覆盖低优先级配置文件内容

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目录下的配置文件,这里面的多数据源配置我没有删除,就会出现以上情况。

 

posted @ 2019-05-28 14:52  今日是主食  阅读(778)  评论(0编辑  收藏  举报