springboot加载配置文件顺序

图片和部分表述来自参考文章非原创

spring boot 加载配置文件

一张图来说明 1297993-20200706162341109-866708304.png

具体的顺序就是 :

1、config/application.properties(项目根目录中config目录下) 2、config/application.yml 3、application.properties(项目根目录下) 4、application.yml 5、resources/config/application.properties(项目resources目录中config目录下) 6、resources/config/application.yml 7、resources/application.properties(项目的resources目录下) 8、resources/application.yml

application 和 bootstrap 文件的区别

bootstrap 从名字就感觉会比 application 早加载,官方文档中的解释 :

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

因此,对比 application 配置文件,bootstrap 配置文件具有以下几个特性。

  • boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
  • boostrap 里面的属性不能被覆盖

bootstrap/ application 的应用场景

  • application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
  • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息; -- 一些固定的不能被覆盖的属性 -- 一些加密/解密的场景;

自定义配置文件加载

  1. 令行参数 所有的配置都可以在命令行上进行指定,例如 :
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
  1. 来自java:comp/env的JNDI属性

  2. Java系统属性(System.getProperties())

  3. 操作系统环境变量

  4. RandomValuePropertySource配置的random.*属性值   由jar包外向jar包内进行寻找; 优先加载带profile

  5. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

  6. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件   再来加载不带profile

  7. jar包外部的application.properties或application.yml(不带spring.profile)配置文件

  8. jar包内部的application.properties或application.yml(不带spring.profile)配置文件

  9. @Configuration注解类上的@PropertySource

  10. 通过SpringApplication.setDefaultProperties指定的默认属性 所有支持的配置加载来源;

参考资料

加载顺序

  • https://www.jianshu.com/p/3c615bd42799
  • https://blog.csdn.net/weixin_41404773/article/details/82459993 application 和 bootstrap 文件的区别
  • https://www.cnblogs.com/javastack/p/11003795.html
原文地址:https://www.cnblogs.com/Benjious/p/13255519.html