springBoot的配置文件加载优先级及同配置覆盖问题是一个比较常见的问题,特别对于初学者来说,容易造成困扰。本文将详细讲解springBoot中配置文件加载优先级及同配置覆盖问题的详细攻略,并且提供两个示例说明。
配置文件的加载优先级
springBoot的配置文件有以下几种类型:
- application.properties
- application.yml
- application.yaml
- application.xml
- application-
.properties - application-
.yml - application-
.yaml - application-
.xml
其中,profile是指springBoot中的profile,可以根据不同的环境加载不同的配置文件。配置文件的加载顺序如下:
- 项目根路径下的config目录中的配置文件;
- 项目根路径下的classpath目录中的配置文件;
- jar包内部的config目录中的配置文件;
- jar包内部的classpath目录中的配置文件;
- 所有jar包内部的/META-INF/spring.factories中指定的ApplicationListener。
可以看出,优先级从高到低,依次是项目根目录下的config目录、项目根目录下的classpath目录、jar包内部的config目录、jar包内部的classpath目录。如果同一配置文件在多个目录下都存在,那么优先使用优先级高的目录下的配置文件。
配置文件的同配置覆盖问题
在不同的配置文件中使用同样的配置项,那么应该以哪个配置文件中的项为准呢?答案是:后加载的配置文件中的配置项会覆盖先加载的配置文件中的同名配置项。
以下是两个示例说明:
示例一
本例中有两个配置文件:application.yml和application-dev.yml。application.yml中定义了database.host=127.0.0.1,application-dev.yml中定义了database.username=root。
# application.yml
database:
host: 127.0.0.1
# application-dev.yml
database:
username: root
在使用dev环境启动应用时,会先加载application.yml,再加载application-dev.yml。因此,最终的配置项如下所示:
database:
host: 127.0.0.1
username: root
可见,后加载的配置文件中的配置项覆盖了先加载的配置文件的同名配置项。
示例二
本例中有两个jar包:a.jar和b.jar。a.jar中的resources/application.yml中定义了database.host=127.0.0.1,b.jar中的resources/application.yml中定义了database.username=root。
# a.jar中的application.yml
database:
host: 127.0.0.1
# b.jar中的application.yml
database:
username: root
在启动应用时,会先加载a.jar中的application.yml,再加载b.jar中的application.yml。因此,最终的配置项如下所示:
database:
host: 127.0.0.1
username: root
可见,后加载的jar包中的配置文件会覆盖先加载的jar包的同名配置文件。
综上所述,对于配置文件的加载优先级及同配置覆盖问题,我们需要了解到所有的配置文件都会被加载,并且后加载的配置文件中的同名配置项会覆盖先加载的配置文件中的同名配置项,这点需要特别注意。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springBoot项目配置文件加载优先级及同配置覆盖问题详解 - Python技术站