多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一、全局配置文件加载优先级 spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件.数值越小的标号优先级越高。 ![](https://img.kancloud.cn/18/af/18aff075bb2d660079fe2ce0b6491c9e_1569x248.png) 1. file:./config/ (当前项目路径config目录下); 2. file:./ (当前项目路径下); 3. classpath:/config/ (类路径config目录下); 4. classpath:/ (类路径下). 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,**高优先级配置内容会覆盖低优先级配置内容**。 ![](https://img.kancloud.cn/34/93/34936c14ebaf25adae503675831e9f9a_384x522.png) SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。假如我们在上面的四个配置文件分别设置server.port=6666、7777、8888、9999。然后启动应用,最终的启动端口为6666,因为`file:./config/`(当前项目路径config目录下配置文件)优先级是最高的。 ### 自定义改变全局配置文件的加载位置:(优先级最高) 我们也可以通过配置spring.config.location来改变默认配置。 ~~~ java -jar ./boot-launch-1.0.jar --spring.config.location=D:/application.yml ~~~ 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置。 ## 二、配置加载优先级 SpringBoot也可以从以下位置加载配置:优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。 1. 命令行参数 2. 来自java:comp/env的JNDI属性 3. Java系统属性(System.getProperties()) 4. 操作系统环境变量 5. RandomValuePropertySource配置的random.\*属性值 6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件 7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件 9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件 10. @Configuration注解类上的@PropertySource 11. 通过SpringApplication.setDefaultProperties指定的默认属性 其实大家关于配置的优先级不用特别的去记忆。用到的时候查一下、体验一下、一般来说:特殊指定配置(命令行、环境变量)大于通用配置、外部配置优先级高于内部配置、局部环境配置(带profile)大于全局普适性配置。 参考:[官方文档,获得更多关于配置优先级的内容](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config)