SpringBoot配置文件优先级详解(超详细讲解)

文章目录

  • 配置优先级排序
  • 项目外部配置文件
  • 项目内部配置文件
  • Bootstrap配置文件
  • 配置优先级排序

    1. 命令行参数;
    2. java:comp/env的JNDI属性(当前J2EE应用的环境);
    3. JAVA系统的环境属性;
    4. 操作系统的环境变量;
    5. JAR包外部的application-xxx.properties或application-xxx.yml配置文件;
    6. JAR包内部的application-xxx.properties或application-xxx.yml配置文件;
    7. JAR包外部的application.properties或application.yml配置文件;
    8. JAR包内部的application.properties或application.yml配置文件;
    9. @Configuration注解类上的@PropertySource指定的配置文件;
    10. 通过SpringApplication.setDefaultProperties 指定的默认属性;

    项目外部配置文件

    1. 命令行参数:
      在命令行中通过 java -jar 命令启动项目时,可以使用连续的两个减号–对配置文件中的属性值进行赋值,则命令行设置的属性会覆盖配置文件中属性的值。
      java -jar xx.jar –server.port=8081 会覆盖配置文件中的端口。

    2. 外置配置文件:
      还可以指定配置文件的路径或者目录,则系统会使用指定的配置文件,或者目录下所有的配置文件。

       java -jar xxx.jar --spring.config.location=/opt/servicex/config/application.yml
       java -jar xxx.jar --spring.config.location=/opt/servicex/config/
      

    项目内部配置文件

    优先级低的配置会被先加载,所以优先级高的配置会覆盖优先级低的配置。

    1. 在同一级目录下
      不同后缀配置文件的优先级:properties(最高) > yml > yaml(最低)
      相同后缀配置文件的优先级:application-xxx.yml > application.yml
    2. 项目中优先级
      ● 项目名/config/xxx.xml (优先级最高)
      ● 项目名/xxx.xml
      ● 项目名/src/main/resources/config/xxx.properties
      ● 项目名/src/main/resources/xxx.yml (优先级最低)
    3. 内外部优先级:
      项目外部配置文件 > 项目内部配置文件

    Bootstrap配置文件

    加载顺序

    ● bootstrap 由spring父上下文加载,比application配置文件优先加载,而application配置文件由子上下文加载
    ● bootstrap加载的配置信息不能被application的相同配置覆盖

    优先级
    bootstrap 的加载优先于 applicaton,所以优先级从大到小如下:

    bootstrap.properties > bootstrap.yml > application.properties > application.yml
    

    配置区别
    bootstrap常见应用场景:

    1. bootstrap配置文件中的配置一般是引导配置,类似于bios,用于连接到spring cloud配置中心,加载应用真正需要的配置数据,如:

       spring.application.name 和 spring.cloud.config.server.git.uri
      
    2. 配置一些固定的不能被覆盖的属性(默认情况下,本地的配置文件不能覆盖远程配置)

    3. 配置加密解密外部配置信息的相关属性
      application常见应用场景:spring boot项目的自动化配置

    作者:来杯@Java

    物联沃分享整理
    物联沃-IOTWORD物联网 » SpringBoot配置文件优先级详解(超详细讲解)

    发表回复