SpringBoot配置加载优先级

1.SpringBoot配置文件


SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。

以设置应用端口为例:

properties文件示例(application.properties):

server.port=80


YAML文件示例(application.yml):

server:
  port: 80


2.两者同时存在情况


假如各配置文件都配置了不同的端口,那么SpringBoot会使用哪一个端口呢?带着疑问试验一下实例:

在resources目录下创建两个配置文件,一个为application.yml配置文件,设置端口为8010,另一个为application.properties配置文件,设置端口为8020;
运行结果:


结论:可见在同一目录下,yaml配置先加载 > properties配置后加载。所以我们在jar包启动时,properties的配置可以覆盖yml配置。

2.配置文件目录及加载顺序


SpringBoot配置文件可以放置在多种路径下,不同路径下的配置加载优先级有所不同。
可放置目录(加载优先级从高到低),低优先级的配置会覆盖高优先级的配置;

classpath:/ (类路径config下);
classpath:/config/ (类路径config目录下);
file:./ (当前项目路径下);
file:./config/ (当前项目路径config目录下);


SpringBoot会从这四个位置全部加载配置文件并互补配置;
我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:

@Deprecated
public class ConfigFileApplicationListener implements EnvironmentPostProcessor, SmartApplicationListener, Ordered {// Note the order is from least to most specific (last one wins)private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";private static final String DEFAULT_NAMES = "application";
}


接着getSearchLocations方法中去逗号解析成Set,其中内部类Loader负责这一配置文件的加载过程,包括加载profile指定环境的配置,以application+’-’+name格式的拼接加载。

多种目录配置同时存在情况
接下来还是以端口配置为例

在resources/目录下配置文件设置端口为8888;
在resources/config目录下配置文件设置端口为9999;
在项目路径下配置文件设置端口为6666;
在项目路径config目录下配置文件设置端口为7777;


 最终运行结果:

Tomcat started on port(s): 7777 (http) with context path '/beedo'
Started BeedoApplication in 4.544 seconds (JVM running for 5.335)


资源文件加载优先级结论:
优先级由高到低如下,低优先级的配置会覆盖高优先级的配置
 

1:resources/目录下配置文件;
2:在resources/config目录下配置文件;
3:在项目路径下配置文件;
4:在项目路径config目录下配置文件;


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch学习2

分类问题 手写数字数据集 其中,每个数字图片大小是28 x 28,矩阵中每个元素的大小为[0,1]区间的灰度值,将二维矩阵拉平(flat)为一维784,数据量不变,这样能忽略上下位置相关性,甚至左右位置相关性…

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5, cmake 版本:3.27.4 gcc 版本:11.4.0 g版本:11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 (1) Built target libprotobuf make: *** [Makefile:163…

10 种超好用的 MyBatis 写法

MyBatis 虽说给我们的开发带来了很多的便捷,但有些地方写起来依旧比较的麻烦,比如配置XML的时候,但是一个好的写法,不仅能为我们节省不少时间、还能能降低出错的概率,下面就给大家分享一些优质的写法: 1用来…

Android编译snowboy

如果Ubuntu是新创建的,可以安装build-essential软件包 sudo apt install build-essential该命令将安装一堆新软件包,包括gcc,g和make。 一、Ubuntu安装git 1.打开终端 在Ubuntu系统中,我们可以使用终端输入命令进行操作。打开…

Linux开发工具之编辑器-vim

vim简单来说就是一款文本编辑器,用于写代码,更是一款多模式编辑器 vim的基本概念 vim有许多种模式,但是铁三角是以下三种模式:命令模式,插入模式,底行模式 1 正常/普通/命令模式(默认打开&…

Java手写快速选择算法应用拓展案例

Java手写快速选择算法应用拓展案例 1. 引言 快速选择算法是一种高效的选择算法,可以用于在数组中找到第K小/大的元素。除了基本的应用场景外,快速选择算法还可以应用于其他问题,如查找中位数、查找最大/最小值等。本文将介绍两个拓展应用案…

Java学习笔记——字符/字符串

在 Java 语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现 StringBuilder 字符 字符是用单引号括起来的单个字母,在Java中,表示字符的数据类型为char。一个字符…

GNU-ncurses库简介

文章目录 前言一、安装与使用二、ncurses库基本用法2.1 initscr()2.2 refresh()2.3 endwin() 三、初始化3.1 raw(), cbreak()3.2 echo() noecho()3.3 keypad()3.4 int halfdelay(int) 四、窗口机制简介五、输出函数六、输入函数七、输出修饰八、窗口机制总结 前言 ncurses是一…

mySQL 安装

一、windows安装包下载 mysql官网提供了两种安装方式,一个是zip安装,另一个是msi安装,这里简绍第一种安装方式,第二种简单,不再简绍 官网下载,根据自己需要选择版本:MySQL :: MySQL Community…

ReactNative中升级IOS 17版本Crash解决

ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…

反转单链表

思路图1: 代码: struct ListNode* reverseList(struct ListNode* head){if(headNULL)//当head是空链表时 {return head; }struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode* n3head->next;if(head->nextNULL)//当链表只有一个节…

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

文章目录 [toc]1. GW1NSR-4C串口外设简介2. FPGA配置3. 常用函数4. 轮询方式接收数据5. 中断方式接收数据 本文是高云FPGA系列教程的第8篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器串口外设的使用,演示轮询方式和中断方式接收串口数据,并进行回环…

如何搭建一个react项目(详细介绍)

要搭建一个基本的 React 项目,你需要执行以下步骤。在开始之前,请确保你已经安装了 Node.js 和 npm(Node 包管理器)。 搭建一个React项目 1,创建项目目录2,初始化项目3,安装 React 和 ReactDOM4…

安卓机型固件系统分区的基础组成 手机启动规律初步常识 各分区的基本含义与说明

此贴为基本常识。感兴趣的友友可以了解手机的启动顺序和各模式的基本操作与意义。另外了解手机系统分区各文件夹的含义 分区说明对应贴:安卓机型固件中分区对应说明 手机开机基本启动顺序 当我们按下手机开机键的时候。基本的启动顺序为 注意:该结构图…

交流耐压试验目的

试验目的 交流耐压试验是鉴定电力设备绝缘强度最有效和最直接的方法。 电力设备在运行中, 绝缘长期受着电场、 温度和机械振动的作用会逐渐发生劣化, 其中包括整体劣化和部分劣化,形成缺陷, 例如由于局部地方电场比较集中或者局部…

Facebook最佳聊单工具--SaleSmartly,智能回复+控评+群控分流

关于SaleSmartlySaleSmartly--全渠道客户沟通平台,它可以帮助企业实现聊天自动化、智能化,提高员工效率,降低人工成本,提升客服质量。 在管理facebook时,你遇到的痛点: (1)FB聊单如何实现业务最…

AUTOSAR汽车电子嵌入式编程精讲300篇-车载CAN总线网络的异常检测(续)

目录 车载 CAN 总线网络异常检测技术 3.1 车载 CAN 总线网络异常检测技术概述 3.1.1基于统计的异

7-3 成绩等级

7-3 成绩等级 给出一个成绩&#xff0c;要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’.(90分以上为’A’,80到89分为’B’,70到79分为’C’,60到69分为’D’,60分以下为’E’。 输入格式: 在一行输入一个整数n&#xff08;n<100)。 输出格式: 在一行中输出成绩相对应的等…

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改…

用于无功补偿的固定电容晶闸管控制反应器研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…