SpringBoot配置文件的优先级
编辑
520
2023-08-30
一、全局配置文件加载优先级
spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件.数值越小的标号优先级越高。
- file:./config/ (当前项目路径config目录下);
- file:./ (当前项目路径下);
- classpath:/config/ (类路径config目录下);
- classpath:/ (类路径下).
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。
SpringBoot
会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。假如我们在上面的四个配置文件分别设置server.port=6666、7777、8888、9999。然后启动应用,最终的启动端口为6666,因为file:./config/
(当前项目路径config目录下配置文件)优先级是最高的。
自定义改变全局配置文件的加载位置:(优先级最高)
我们也可以通过配置spring.config.location来改变默认配置。
java -jar ./boot-launch-1.0.jar --spring.config.location=/etc/app/application.yml
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置。
二、配置加载优先级
SpringBoot也可以从以下位置加载配置:优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
- 命令行参数
- 来自java:comp/env的JNDI属性
- Java系统属性(System.getProperties())
- 操作系统环境变量
- RandomValuePropertySource配置的random.*属性值
- jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包外部的application.properties或application.yml(不带spring.profile)配置文件
- jar包内部的application.properties或application.yml(不带spring.profile)配置文件
- @Configuration注解类上的@PropertySource
- 通过SpringApplication.setDefaultProperties指定的默认属性
其实大家关于配置的优先级不用特别的去记忆。用到的时候查一下、体验一下、一般来说:特殊指定配置(命令行、环境变量)大于通用配置、外部配置优先级高于内部配置、局部环境配置(带profile)大于全局普适性配置。
参考:官方文档
- 7
- 0
-
分享