1、 SpringBoot内外部配置文件加载和优先级!

前言:

Spring这么流星很重要的一个思想是:配置化思想。从而达到解耦的目的,很多都不需要硬编码,配置一下即可完成,可谓大大提高了编码的效率。
Spring支持的配置文件加载的方式繁多,一方面是扩大了灵活性,另一方面其实也带来了较大的复杂性。因此本文旨在用一篇文章解决读者朋友的烦恼,同时有时候也是你我的烦恼。
我们知道SpringBoot支持三种配置文件:
application*.yml
application*.yaml
application*.properties 
示例:
在 Resources 文件夹下新建 application.yml 和 application.properties 文件。

application.properties:
server.port=8001application.yml :
server:port: 7001

运行程序:
SpringBoot内外部配置文件加载和优先级_经验分享
通过运行结果,我们可以得出:
这三种配置文件以 application*.properties 优先级最高,application.properties 和 yml 文件在并存时(同一目录下),
application.properties 优先级更好,会先读它,若它没有,再去读yml中的值。
下面所有的Demo代码都以 yml 进行演示

2、内部的配置文件加载


项目启动后扫描顺序:

1)先去项目根目录找config文件夹下找配置文件件
2)再去根目录下找配置文件
3)去resources下找cofnig文件夹下找配置文件
4)去resources下找配置文件

以上四个目录,SpringBoot 启动时会按照优先级从低到高的顺序,所有的配置文件都会被加载,高优先级的配置文件会覆盖低优先级的配置文件内容。
SpringBoot 会按照四个位置全部加载配置文件,如果高优先级的配置文件属性和低优先级的配置文件属性不冲突,则会共存互补。
按照上面的目录,我们在项目中分别建立对应的文件夹和文件夹下的文件,配置文件的优先级为:
备注:
这里说的配置文件,都还是项目里面。最终都会被打进jar包里面的,需要注意。
1)、如果同一个目录下,有 application.yml 也有 application.properties,默认先读取 application.properties。
2)、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
3)、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”

3 外部配置文件加载

有的时候,配置信息是我们无法在开发过程中就能确定的。比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等。
这时候,就需要把配置文件放在外面,让用户自定义配置部署了。
SpringBoot 打包时不会把 ./config ./这两级的目录打包进去。这个设计很巧妙,因为没有打包进来,所以SpringBoot可以加载外部发配置文件。
SpringBoot 支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件

1)、现在有一个SpringBoot 打包程序,(有一个配置文件 application.yml 在默认的 Resources 文件夹下):

2)、这时,我们在根目录添加配置文件 application.properties:

3)、这时,我们在根目录添加文件夹和配置文件 ./config/application.properties

4、命令行配置方式

比如 java -jar 这种方式,多个属性之间用空格分开,properties 里的属性基本都能用,用法是属性项=属性值这种方法,举个例子:
复制
java -jar springboot-0.0.1-SNAPSHOT.jar --server.port=8002 --server.context-path=/example

上面的命令行进行了两个配置 server.port 和 server.context-path。可以根据需要进行配置。
如果我们外部的配置文件不想放在默认的位置,可使用 --spring.config.location 命令指定配置文件的目录。
在根目录新建 test 文件夹,把 application.properties 配置文件放入其中:

5、优先级从高到低

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 。

1)命令行参数。所有的配置都可以在命令行上进行指定;
2)来自java:comp/env的JNDI属性;
3)Java系统属性(System.getProperties());
4)操作系统环境变量 ;
5)jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
6)jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
7)jar包外部的application.properties或application.yml(不带spring.profile)配置文件
8)jar包内部的application.properties或application.yml(不带spring.profile)配置文件
9)@Configuration注解类上的@PropertySource

SpringBoot 配置文件加载优先级相关推荐

  1. SpringBoot - 配置文件加载位置与优先级

    SpringBoot - 配置文件加载位置与优先级 [1]项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者application.yml文 ...

  2. springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析

    SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...

  3. springBoot项目配置文件加载优先级及同配置覆盖问题

    背景: 由于目前网上对于springboot配置文件的加载问题,存在着各种不同的说法.所以导致自己不敢确定到底何种结论才是真正正确的,故专门花费了一些时间进行亲自验证. 验证: 在经过自己对配置文件的 ...

  4. Spring Boot的配置文件加载优先级

    基于Spring Boot 2.x详细介绍了Spring Boot的配置文件的加载优先级. 文章目录 1 总体优先级 2 内部配置优先级 3 bootstrap和application的优先级 1 总 ...

  5. springBoot配置文件加载原理探究

    尽管用springBoot做开发已经有很长一段时间了,在开发时一般都是直接将application.properties或application.yml,放在开发环境的resources下的,运行起来 ...

  6. 配置文件加载优先级和外部配置文件加载||IDEA外部配置文件无法加载

    1,项目内部配置文件 spring boot 启动会扫描以下位置的 application.properties 或者 application.yml 文件作为 Spring boot 的默认配置文件 ...

  7. springboot配置文件加载顺序

    1.同一目录下,properties配置优先级 > YAML配置优先级. 2.SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同.可放置目录(优先级从高到低) fi ...

  8. SpringBoot配置文件加载时机

    今天遇到一个问题,项目中,数据库密码使用CyberArk管理,在yml配置文件中的配置是密码对应的一个key,所以需要在运行时合适的时机去通过接口获取密码并设置到SpringBoot中.问题是使用lo ...

  9. springboot 配置文件加载顺序 与boboootStrap属性文件对比

    spring boot 启动时 会扫描 以下位置的 application.properties 或者 yml 作为默认配置文件 file:./config/ file:./ classpath:/c ...

  10. springboot配置文件加载位置

    高优先级覆盖低优先级 配置互补

最新文章

  1. 极简PaddlePaddle的房价预测Demo
  2. windows笔记-内存映射文件
  3. python玩转大数据视频[非原创视频]
  4. What is the usage of Transfer field in Text determine procedure customizing
  5. php延迟更新,ThinkPHP开发指南-模型-高级模型之延迟更新
  6. leetcode 1046. 最后一块石头的重量(堆)
  7. sublime Text 3实用功能和常用快捷键收集
  8. 通过asp.net 短信猫发短信
  9. javascript循环语句及函数
  10. python 实现dcmtk关联pacs功能 推送下拉影像
  11. 风力摆控制系统赛题分析
  12. nvme-cli tool 刷FW(固件)
  13. Windows更新错误
  14. linux运行360wifi,在Linux下使用“360随身WiFi 2”
  15. 将实时频谱分析仪与HIF输出配合使用
  16. 爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
  17. github项目ratel:JAVA实现斗地主
  18. 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)
  19. Linux:共享内存
  20. DevOps工具链:开放、自由地选择最适合团队和业务需要的工具

热门文章

  1. 高斯勒让德求积公式matlab通用程序,MATLAB软件及高斯勒让德求积公式.doc
  2. 5.4 图层样式面板的实例讲解 [原创Ps教程]
  3. 大写罗马数字(大写罗马数字3)
  4. word安全模式解除
  5. python读取图片信息_笔记整理4——python实现提取图片exif信息
  6. php 获取照片信息,PHP如何读取照片的exif信息实现代码(2)
  7. win11如何备份系统 Windows11备份系统的设置方法
  8. movs 数据传送指令_Introduction to CSAPP(十二):数据传送指令与 C 语言赋值
  9. linux下dbf是什么文件,DBF文件怎么打开?DBF文件的打开方法教程
  10. java类 举例分析_Java深入分析类与对象