SpringBoot中的配置文件加载优先级详解

 更新时间:2024年01月02日 11:18:52   作者:my_sky_  
这篇文章主要介绍了SpringBoot中的配置文件加载优先级详解,springboot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件,需要的朋友可以参考下

springboot配置文件的加载先后顺序

1、内部配置加载顺序

springboot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

  • –file:./config/ --> 当前项目根目录下的 config 目录下
  • –file:./ --> 当前项目的根目录下
  • –classpath:/config/ --> resources/config目录下
  • –classpath:/ --> resources目录下

SpringBoot官网:

在这里插入图片描述

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

  • 如果低优先级存在高优先级没有的属性,则会互补配置。
  • 如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的

这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。

我们也可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。

	java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

项目默认加载的配置文件名是 application ,我们可以通过属性 spring.config.name 来指定配置文件的文件名。

使用 spring.config.location 属性重新定义配置文件的位置,它会覆盖掉默认的四个位置。使用 spring.config.additional-location 这个属性自定义配置文件位置,表示在默认的四个位置的基础上,再添加几个位置,新添加的位置的优先级大于原本的位置。 在自定义配置文件位置时,值一定要以 / 结尾。例如 spring.config.location=classpath:/myconfig/

2、外部配置加载顺序

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

(1)命令行参数 (加载时优先加载) 所有的配置都可以在命令行上进行指定( --配置)。 可以通过指定 --spring.config.location来改变默认的配置文件位置:

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.yml

多个配置用空格分开;格式为: --配置项=值

(2)来自java:comp/env的JNDI属性

(3)Java系统属性(在命令行中使用-D指定),可通过System.getProperties()获得相关内容

java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar

(4)操作系统环境变量

大多数操作系统不允许使用句点分隔的键名,使用下划线代替(例如,SPRING_CONFIG_NAME代替spring.config.name)

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

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

(7)jar包内部的application-{profile}.properties或application-{profile}.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指定的默认属性

其中常用的为:(1)(6)(7)(8)(9)(10)

总结

  • 优先加载操作系统层面的配置、命令行
  • 由jar包外向jar包内进行寻找,优先查找config目录。
  • 优先加载带profile(application-{profile}.yml)的,后加载不带profile(application.yml)的
  • 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

3、远程配置中心

以Nacos为例:默认远程配置优先级最高

可以通过在远程配置中心中做如下配置,设置本地配置覆盖远程配置:

spring:
  cloud:
    config:
      # 是否允许本地配置覆盖远程配置
      allow-override: true
      # 是否一切以本地配置为准,默认false
      override-none: false
      # 系统环境变量或系统属性才能覆盖远程配置文件的配置
      # 本地配置文件中配置优先级低于远程配置,默认true
      override-system-properties: true

到此这篇关于SpringBoot中的配置文件加载优先级详解的文章就介绍到这了,更多相关SpringBoot配置文件优先级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • POI导出之Excel实现单元格的背景色填充问题

    POI导出之Excel实现单元格的背景色填充问题

    这篇文章主要介绍了POI导出之Excel实现单元格的背景色填充问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java中LinkedList和ArrayList的效率分析

    Java中LinkedList和ArrayList的效率分析

    本文主要介绍了Java中LinkedList和ArrayList的效率分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • SpringBoot整合PageHelper分页无效的常见原因分析

    SpringBoot整合PageHelper分页无效的常见原因分析

    这篇文章主要介绍了SpringBoot整合PageHelper分页无效的常见原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解SpringBoot Starter作用及原理

    详解SpringBoot Starter作用及原理

    大家都知道基于 SpringBoot 开发项目可以简化 Spring 应用的搭建以及开发过程,提高程序员开发效率,这是由于其“约定大约配置”的策略及其自动装配的特点,Starter 就是自动装配的具体实现,本文详细介绍了SpringBoot Starter作用及原理,欢迎大家来阅读学习
    2023-04-04
  • 详解Struts2动态方法调用

    详解Struts2动态方法调用

    这篇文章主要介绍了详解Struts2动态方法调用,涉及调用方法的代码,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • Java设置PDF跨页表格重复显示表头行的步骤详解

    Java设置PDF跨页表格重复显示表头行的步骤详解

    这篇文章主要给大家介绍了关于Java设置PDF跨页表格重复显示表头行的相关资料,这里使用的是Free Spire.PDF for Java的jar包,Spire.PDF for Java 是一款专门对 PDF 文档进行操作的 Java 类库,需要的朋友可以参考下
    2021-07-07
  • Java实现添加、验证PDF数字签名的方法示例

    Java实现添加、验证PDF数字签名的方法示例

    在设置文档内容保护的方法中,除了对文档加密、添加水印外,应用数字签名也是一种有效防伪手段。本文就使用Java实现添加、验证PDF数字签名,感兴趣的可以了解一下
    2021-07-07
  • win10下配置java环境变量的方法

    win10下配置java环境变量的方法

    这篇文章主要介绍了win10下配置java环境变量的方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • mybatis in foreach 双层嵌套问题

    mybatis in foreach 双层嵌套问题

    这篇文章主要介绍了mybatis in foreach 双层嵌套问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Spring中的@Qualifier注解和@Resource注解区别解析

    Spring中的@Qualifier注解和@Resource注解区别解析

    这篇文章主要介绍了Spring中的@Qualifier注解和@Resource注解区别解析,@Qualifier注解的用处是当一个接口有多个实现的时候,为了指名具体调用哪个类的实现,@Resource注解可以通过 byName命名和byType类型的方式注入,需要的朋友可以参考下
    2023-11-11

最新评论