springboot如何查找配置文件路径的顺序和其优先级别

 更新时间:2022年08月29日 08:41:46   作者:艾尚波  
此文是在工作中遇到的关于springboot配置文件的问题,在网上查阅资料和自己测试之后记录的,以便日后查阅。希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

查找配置文件路径的顺序和其优先级别

提示:以下是本篇文章正文内容,下面案例仅供参考

一、springboot查找配置文件路径的顺序和其优先级别

在项目类,有四个地方系统会自动扫描:

1.file:/config/

2.file:/

3.classPath:/config/

4.classPath:/

1)其文件生效优先级别,从上到下,即如果在不同路径有相同属性,会优先选择上面的路径属性(1>2>3>4)

2)路径扫描顺序和其优先级别相反(4>3>2>1),后面的会覆盖前面的,并且所有路径都会扫描,形成互补。

二、同路径下

application.properties(application.yml)、bootstrap.properties(bootstrap.yml)加载顺序及优先级别

1.application和bootstrap比较(前缀比较)

提示:bootstrap类型文件是在多服务项目时,引入了springcloud相关配置才会生效,springboot并不会自动扫描bootstrap文件,只会扫描application文件,所以两者的比较只有在spingcloud多服务项目中才有意义。

1)先后加载顺序:若application 和bootstrap 在同一目录下:bootstrap先加载 application后加载

2)优先级问题:Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖。(这个是网上和官方的说法,但经过本人的测试,发现application 会覆盖bootstrap,我的理解是不是所有的bootstrap属性都比application优先,只有涉及底层系统相关配置才会比较高 ,有不同看法的老哥欢迎探讨)

3)区别:bootstrap 和 application 都可以用来配置参数。

bootstrap 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

4)bootstrap典型的应用场景(经典三点)

  • 1.当使用 Spring Cloud Config Server 配置中心时,这时需要在 bootstrap.yml 指定 spring.applicatio配置文件中n.name 和 spring.cloud.config.server.git.uri,添加连接到配置中心的配置属性来加载外部配置中心的配置信息
  • 2.一些固定的不能被覆盖的属性
  • 3.一些加密/解密的场景

2. .properties和.yml比较(后缀比较)

1)加载顺序

.yml先于.properties

2)优先级别

.properties优先于.yml,因为.properties后加载会覆盖.yml

3)区别

  • 1.yml拥有天然的树状结构,properties是键值对;
  • 2.在properties文件中是以”.”进行分割的, 在.yml中是用”:”进行分割;
  • 3.在.yml中缩进一定不能使用TAB,否则会报很奇怪的错误;;
  • 4.yml比.properties对中文对支持更友好。
  • 5.yml是跨语言的:可以在包括JAVA,go,python等大量的语言中使用,比如做云计算使用go和java的时候,可以通过配置中心使用同一份配置!
  • 6.在自定义配置文件时,只能使用properties,因为spring只有@PropertiesSource注解可以引入自定义注解,对yml没有支持

小结:在同级目录下,优先级别application>bootstrap,.properties>,yml,前缀大于后缀,文件路径大于文件名称

springboot配置文件不生效的原因

1、将打包方式改为jar 。

<packaging>jar</packaging>

2、可能是yml文件缩近格式不对,仔细检查一下就行了。

3、还有就是你的根本就不是boot项目,application.yml没有叶子标志

1.点开项目结构

2.打开模块一次点击

3.

4.重构项目

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot如何使用过滤器进行XSS防御

    SpringBoot如何使用过滤器进行XSS防御

    想对全局的请求都进行XSS防御可以使用servlet中的过滤器或者spring mvc中的拦截器,下面我们就来看看如何使用servlet中的过滤器进行XSS防御吧
    2024-11-11
  • spring的jdbctemplate的crud的基类dao

    spring的jdbctemplate的crud的基类dao

    本文主要介绍了使用spring的jdbctemplate进行增删改查的基类Dao的简单写法,需要的朋友可以参考下
    2014-02-02
  • Java如何实现数字逆序

    Java如何实现数字逆序

    这篇文章主要介绍了Java如何实现数字逆序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Spring Boot使用JSR-380进行校验的示例

    Spring Boot使用JSR-380进行校验的示例

    这篇文章主要介绍了Spring Boot使用JSR-380进行校验,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • SpringBoot整合freemarker的讲解

    SpringBoot整合freemarker的讲解

    今天小编就为大家分享一篇关于SpringBoot整合freemarker的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java中Path和ClassPath用法比较

    java中Path和ClassPath用法比较

    在本篇文章里小编给大家分享了关于java中Path和ClassPath用法比较内容,有需要的朋友们学习下。
    2019-01-01
  • 深入Synchronized和java.util.concurrent.locks.Lock的区别详解

    深入Synchronized和java.util.concurrent.locks.Lock的区别详解

    本篇文章是对Synchronized和java.util.concurrent.locks.Lock的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Java获取电脑真实IP地址的示例代码

    Java获取电脑真实IP地址的示例代码

    这篇文章主要介绍了Java如何获取电脑真实IP地址,忽略虚拟机等IP地址的干扰,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09
  • SpringBoot与spring security的结合的示例

    SpringBoot与spring security的结合的示例

    这篇文章主要介绍了SpringBoot与spring security的结合的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Spring中xml配置文件的基础使用方式详解

    Spring中xml配置文件的基础使用方式详解

    这篇文章主要介绍了Spring中xml配置文件的基础使用方式,主要包括xml配置文件的读取,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论