SpringBoot配置加载顺序

文章目录

  • 配置文件加载位置
  • 外部配置加载顺序优先级
  • 有配置中心时的加载顺序
  • bootstrap.yml 和 application.yml 哪个优先加载?

配置文件加载位置

springboot 启动默认会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文
件 ,如果想修改加载配置文件的位置,可以设置spring.config.location 属性:

  1. –file:./config/

  2. –file:./

  3. –classpath:/config/

  4. –classpath:/

–file: 当前项目的外部配置文件路径 ;

–classpath: 当前项目类路径,比如:resources/目录下的配置

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

外部配置加载顺序优先级

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会
形成互补配置

总的来说,加载顺序是: JVM -> ENV -> properties/yml -> 默认值

  1. 命令行参数(所有的配置都可以在命令行上进行指定)

    # 多个配置用空格分开; --配置项=值
    java -jar xxx.jar --server.port=8087 --server.context-path=/abc
    
  2. 来自java:comp/envJNDI属性

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

  4. 操作系统环境变量

  5. RandomValuePropertySource配置的random.*属性值

    寻找优先加载带profile的配置

  6. jar包外部的application-{profile}.propertiesapplication-{profile}.yml配置文件

  7. jar包内部的application-{profile}.propertiesapplication-{profile}.yml配置文件

    再来加载不带profile的配置

  8. jar包外部的application.propertiesapplication.yml配置文件

  9. jar包内部的application.propertiesapplication.yml配置文件

  10. @Configuration注解类上的@PropertySource

  11. 通过SpringApplication.setDefaultProperties指定的默认属性

有配置中心时的加载顺序

如果你有使用配置中心 ,如 Nacos , 则加载顺序就是 : Nacos -> JVM -> ENV -> properties/yml -> 默认值

bootstrap.yml 和 application.yml 哪个优先加载?

答: bootsrap.yml 优先加载
SpringBoot配置加载顺序_第1张图片
总结: bootstrap.yml 是系统级的加载配置,常常用于读取"配置中心"地址。比如spring.cloud.config.nacos.xxxx

特别地,由于bootstrap.yml 只会读取系统级的配置初始化,其他配置它会忽略掉。假如你把自定义的配置user.info=xxx分别放在bootstrap.ymlapplication.yml,你会发现bootstrap.ymluser.info属性会被application.yml覆盖掉, 根据"读取优先级高的配置覆盖读取优先级低的配置"的原则,这说明这种情况读取优先级是application.yml -> bootstrap.yml, 但这是一种假象。你可以理解为:非系统级的、自定义的属性配置在bootstrap.yml中时,该配置是最低优先级的。

你可能感兴趣的:(spring,boot,java)