SpringBoot配置文件的优先级
本文主要详细介绍SpringBoot项目中配置文件的优先级。
优先级高的配置会覆盖优先级低的配置。
总体优先级
(1)命令行参数,比如--server.port=8081
(2)JVM系统属性,通过System.getProperties()方法获取;
(3)系统环境属性,通过System.getenv()方法获取;
(4)jar包外部的application-{profile}.properties/yml配置文件,如果没有指明激活的profile,则默认为default;
(5)jar包内部的application-{profile}.properties/yml配置文件,如果没有指明激活的profile,则默认为default;
(6)jar包外部的application.properties/yml配置文件;
(7)jar包内部的application.properties/yml配置文件;
(8)通过@Configuation注解类上的@PropertySource注解引入的配置文件;
(9)通过SpringApplication.setDefaultProperties指定的默认属性;
项目外部配置文件
命令行参数
在命令行中通过java -jar命令启动项目时,可以使用连续的两个减号--对配置文件中的属性进行赋值,命令行设置的值会覆盖配置文件中的属性值。
例如:
java -jar xx.jar --server.port=8081 会覆盖配置文件中的端口号。
外部配置文件
还可以指定配置文件路径或者目录,来使系统使用指定的配置文件,或者目录下的所有配置文件。
例如:
java -jar xxx.jar --spring.config.location=/opt/service/config/application.yml
java -jar xxx.jar --spring.config.location=/opt/service/config/
项目内部配置文件
优先级低的配置会被先加载,所以优先级高的配置会覆盖优先级低的配置。
同一级目录下
不同后缀配置文件的优先级:properties(最高)> yml > yaml(最低)
相同后缀配置文件的优先级:application-{profile}.yml > application.yml
项目中配置优先级
从高到低为:
项目名/config/xxx.xml(优先级最高)
项目名/xxx.xml
项目名/src/main/resources/config/xxx.properties
项目名/src/main/resources/xxx.yml(优先级最低)
内外部优先级:
项目外部配置文件 > 项目内部配置文件
bootstrap和application的优先级
加载顺序
bootstrap配置文件由spring父上下文加载,并且比application配置文件优先加载(父上下文不会使用application配置文件)而application配置文件由子上下文加载。
bootstrap加载的配置信息不能被application的项目配置覆盖。
优先级
bootstrap的加载优先于application,所以优先级从大到小如下:
bootstrap.properties > bootstrap.yml > application.properties > application.yml
应用场景
bootstrap常见应用场景:
(1)bootstrap配置文件中的配置一般是引导配置,类似于bios,用于连接到spring cloud配置中心,加载应用真正需要的配置数据。
(2)配置一些固定的不能被覆盖的属性;
(3)配置加密解密外部配置信息的相关属性;
application常见应用场景:
springboot项目的自动化配置。
注意:一般情况下,不需要区分这两个配置文件,只需使用application.yml即可,把全部配置信息都写在这里,效果基本是一致的。
(完)