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配置文件优先级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java利用openoffice将doc、docx转为pdf实例代码

    Java利用openoffice将doc、docx转为pdf实例代码

    这篇文章主要介绍了Java利用openoffice将doc、docx转为pdf实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 关于Spring @Bean 相同加载顺序不同结果不同的问题记录

    关于Spring @Bean 相同加载顺序不同结果不同的问题记录

    本文主要探讨了在Spring 5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的Bean实例也会不同,文章通过分析ConfigurationClassPostProcessor的执行过程,解释了BeanDefinition的加载和覆盖机制,感兴趣的朋友一起看看吧
    2025-02-02
  • 搭建公司私有MAVEN仓库的方法

    搭建公司私有MAVEN仓库的方法

    这篇文章主要介绍了搭建公司私有MAVEN仓库的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • mybatis教程之resultmap_动力节点Java学院整理

    mybatis教程之resultmap_动力节点Java学院整理

    这篇文章主要介绍了mybatis教程之resultmap,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java使用jmeter进行压力测试

    Java使用jmeter进行压力测试

    本篇文章简单讲一下使用jmeter进行压力测试。其压测思想就是 通过创建指定数量的线程,同时请求指定接口,来模拟指定数量用户同时进行某个操作的场景,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java中的ReentrantLock解读

    Java中的ReentrantLock解读

    这篇文章主要介绍了Java中的ReentrantLock解读,ReentantLock是java中重入锁的实现,一次只能有一个线程来持有锁,包含三个内部类,Sync、NonFairSync、FairSync,需要的朋友可以参考下
    2023-09-09
  • SpringBoot集成itext导出PDF的过程

    SpringBoot集成itext导出PDF的过程

    本文介绍了如何在Spring Boot中集成iText库导出PDF文件,并解决中文乱码问题,步骤包括添加依赖、准备字体、打开系统字体目录选择字体、在控制器中新增方法、创建并测试UserPdfExportService类,以及添加请求头,感兴趣的朋友一起看看吧
    2024-11-11
  • Java中条件运算符的嵌套使用技巧总结

    Java中条件运算符的嵌套使用技巧总结

    在Java中,我们经常需要使用条件运算符来进行多个条件的判断和选择,条件运算符可以简化代码,提高代码的可读性和执行效率,本文将介绍条件运算符的嵌套使用技巧,帮助读者更好地掌握条件运算符的应用,需要的朋友可以参考下
    2023-11-11
  • java底层JDK Logging日志模块处理细节深入分析

    java底层JDK Logging日志模块处理细节深入分析

    这篇文章主要为大家介绍了java底层JDK Logging日志模块处理细节深入分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • EasyExcel实现读写Excel文件的示例代码

    EasyExcel实现读写Excel文件的示例代码

    EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。它可以在尽可能节约内存的情况下支持读写百M的Excel,所以本文就将利用它实现读写Excel文件,感兴趣的可以了解一下
    2022-08-08

最新评论