SpringBoot配置文件加载优先级
目录
示例
配置文件&编写配置类
在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低:
-
命令行参数: 命令行参数具有最高的优先级。SpringBoot项目被启动时,可以通过命令行传递参数,这些参数将覆盖其他所有配置源中的相同属性。
java -jar your-application.jar --spring.datasource.url=jdbc:mysql://localhost:3306/mydb -
环境变量: 环境变量的优先级高于配置文件。在操作系统中设置的环境变量可以被Spring Boot应用读取,并用于覆盖配置文件中的属性。
-
Java系统属性: 通过Java的
-D参数设置的系统属性也具有较高的优先级,可以覆盖配置文件中的属性。java -Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb -jar your-application.jar -
配置文件中的
@PropertySource注解: 如果在配置类上使用了@PropertySource注解指定了额外的配置文件,那么这些文件中的属性将按照注解中指定的顺序被加载,具有较高的优先级。 -
配置文件(application.properties 或 application.yml): 位于
src/main/resources目录下的application.properties或application.yml文件中的属性具有中等优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些文件中读取该属性。 -
配置类(
@ConfigurationProperties): 使用@ConfigurationProperties注解的配置类中的属性具有较低的优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些配置类中读取该属性。 -
默认值: 当所有配置源中都没有定义某个属性时,Spring Boot将使用该属性的默认值(如果存在)。
示例
假设这里有一个名为 spring.datasource.url 的配置属性,可以在多个地方定义它:
-
命令行参数:
--spring.datasource.url=jdbc:mysql://localhost:3306/mydb -
环境变量:
SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb -
Java系统属性:
-Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb -
@PropertySource注解指定的配置文件 -
application.properties或application.yml文件 -
使用
@ConfigurationProperties注解的配置类
Spring Boot将按照上述优先级顺序查找这个属性。如果在命令行参数中找到了该属性,那么它将被应用;如果命令行参数中没有定义,那么Spring Boot将继续查找环境变量、系统属性等,直到找到该属性或找不到最终使用默认值。
配置文件&编写配置类
| 特点 | 配置文件方式 (spring.datasource.type) | Java 配置类方式 |
|---|---|---|
| 实现方式 | 在 application.properties 或 application.yml 中添加配置 | 编写一个 Java 配置类 |
| 代码量 | 极低,只需添加一行配置 | 高,需要编写一个配置类 |
| 灵活性 | 普通,通过修改配置文件即可切换数据源 | 高,可以通过代码动态修改数据源配置 |
| 适用场景 | 适用于大多数简单场景,尤其是不需要动态修改数据源配置的项目 | 适用于需要动态修改数据源配置,或者需要更复杂的初始化逻辑的项目 |
| 可维护性 | 高,配置集中管理,易于修改 | 中,需要维护 Java 配置类代码 |
| 是否需要额外依赖 | 需要引入 Druid 依赖 | 需要引入 Druid 依赖 |
| 是否需要额外代码 | 不需要 | 需要编写配置类代码 |
| 是否支持动态修改 | 不支持,只能通过修改配置文件并重启应用 | 支持,可以通过代码动态修改数据源配置 |
| 是否支持高级配置 | 支持,可以通过 spring.datasource.druid.* 配置高级属性 | 支持,可以通过代码设置高级属性 |
相关文章:
SpringBoot配置文件加载优先级
目录 示例 配置文件&编写配置类 在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低: 命令行参数…...
【详细解决】pycharm 终端出现报错:“Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
昨天在终端一顿操作后突然打开pycharm时就开始报错: 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 Failed to act…...
CXL协议之FM(Fabric Management)解释
CXL协议中的FM功能详解 1. FM的核心作用 FM是CXL(Compute Express Link)架构中的核心管理实体,负责协调和管理CXL设备之间的通信、资源分配及拓扑结构。其核心功能包括: 设备发现与枚举:识别CXL拓扑中的设备&#x…...
用Promise实现ajax的自动重试
有时候遇到网络错误,希望可以多试几次,可以利用Promise递归调用实现 以若依系统的登出举例 export function logout() {return request({url: /logout,method: post}) } 修改下原本的登出逻辑,遇到ERR_NETWORK错误,也就是网络问…...
Unity URP 实现场景和UI添加后处理
在更新到URP之后,之前内置的渲染管线的那一套后处理已经无法使用,接下来,我们使用URP的内置后处理实现对场景和UI的后处理。 设置UI 如果UI需要使用后处理,在Canvas里,我们要选择Screen Space - Camera,然…...
搭建ISCSI传输的配置与管理
前提是: windows server2019设置成桥接模式,因为要让虚拟机和主机设置成一个网段,才能通过网络进行新建虚拟磁盘。 1.添加ISCSI角色 安装位置 选择文件和存储服务----------文件和iscsl 服务------------iscsl目标服务器 2.右上角点击任务&a…...
华为参访预约,团队考察体验黑科技之旅
华为参观学习背景 全球第1,中国骄傲 成立于1987年的华为,早在2013年其销售收入就已超过爱立信,成为全球行业第1名。2019年福布斯世界500强排名第61位,全球唯1一家没有上市的民营企业。目前,华为5G技术已经走在世界前沿…...
Java 设计模式之享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 是一种 结构型设计模式,旨在通过共享对象来有效支持大量细粒度对象的复用,从而减少内存占用和提高性能。其核心是 分离内部状态(可共享)与外部状态(不可共享&#…...
C#入门学习记录(三)C#中的隐式和显示转换
C#类型转换:隐式与显式转换的机制与应用 在C#的强类型体系中,数据类型转换是实现数据交互和算法逻辑的基础操作。当数值类型范围存在包含关系,或对象类型存在继承层次时,系统通过预定义的转换规则实现类型兼容处理。隐式转换&…...
Rk3568驱动开发_设备树_9
什么是设备树? 以我目前的理解,设备树更像日常生活中用的地图,用户能根据地图去寻找到相应位置 设备树也是如此它描述了硬件设备的连接关系和配置信息,供 CPU(或者更准确地说,是操作系统内核)…...
一和零 (leetcode 474
leetcode系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 本题是一个01背包问题,只是背包是一个二维数组的背包,分别为0的个数不能超过m,1的个数不能超过n,而物品就是题目中的字符串,其容量为0和1的…...
深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)
原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…...
【AI News | 20250320】每日AI进展
AI Repos 1、servers 该仓库提供详细入门指南,用户可通过简单步骤连接Claude客户端,快速使用所有服务器功能。此项目由Anthropic管理,展示MCP的多样性与扩展性,助力开发者为大语言模型提供安全、可控的工具与数据访问。 2、awe…...
从零开始实现 C++ TinyWebServer 阻塞队列 BlockQueue类详解
文章目录 阻塞队列是什么?为什么需要阻塞队列?BlockQueue 成员变量实现 push() 函数实现 pop() 函数实现 close() 函数BlockQueue 代码BlockQueue 测试 从零开始实现 C TinyWebServer 项目总览 项目源码 阻塞队列是什么? 阻塞队列是一种线程…...
Linux驱动开发基础(can)
目录 1.can的介绍 2.can的硬件连接 2.1 CPU自带can控制器 2.2 CPU没有can控制器 3.电气属性 4.can的特点 5.can协议 5.1 can的种类 5.2 数据帧 5.2.1 标准数据帧格式 5.3.1 扩展数据帧格式 5.3 遥控帧 5.4 错误帧 5.5 过载帧 5.6 帧间隔 5.7 位填充 5.8 位时…...
5.2《生活中的透镜》——5.3《凸透镜成像规律》讲后再上
教会什么:照相机、投影仪、放大镜的原理 培养什么:(再说) 课标: (二)运动和相互作用 2.3 声和光 2.3.5了解凸透镜成像规律的应用。 例7 了解凸透镜成像规律在放大镜、照相机中的应用。 一、导入 提问:生活中有哪些透镜?(放大镜、照相机、投影仪/幻灯机) ——直接提出…...
【LangChain入门 3 Prompts组件】聊天提示词模板 ChatPromptTemplate
文章目录 一、 聊天信息提示词模板1.1 使用关键字1.2 使用SystemMessage, HumanMessage, AIMessage来定义消息1.3 使用MessagesPlaceholder 在特定未知添加消息列表 二、关键类介绍2.1 ChatPromptTemplate 类2.1.1 from_messages()2.1.2 format_messages()2.1.3 format_prompt(…...
fastadmin后台管理员日志指定方法不记录
做的订单提醒,只要在线会把日志自动存储进去,这个又是每30s执行一次,数据库没多久就爆掉了,最终找到一个处理方法,可能不是最好的,仅供大家参考 具体位置: application/admin/model/AdminLog.php里面的$ignoreRegex方法 protected static $ignoreRegex [/^(.*)\/(selectpage…...
leetcode热题100道——字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…...
MCU-芯片时钟与总线和定时器关系,举例QSPI
时钟源: 时钟源为系统时钟提供原始频率信号,系统时钟则通过(分频、倍频、选择器)成为整个芯片的“主时钟”,驱动 CPU 内核、总线(AHB、APB)及外设的运行。 内部时钟源: HSI&#x…...
力扣热题100(方便自己复习,自用)
力扣热题100 1. 两数之和 - 力扣(LeetCode) 查找两数之和是不是等于target也就是我们找到一个数之后,用target将其减掉,再寻找应当对应的元素是什么每找到一个数,我们就将其放在集合中,因为集合中可以去重…...
暂存合并分支
合并分支代码,冲突过多,没解决完 想切换分支,可以把合并暂存 先先 git add . 再git stash 恢复搁置: 查看当前的搁置列表: git stash list恢复特定的搁置 如果你想恢复特定的搁置更改,可以指定索引&a…...
力扣hot100——三数之和(双指针)
题目:三数之和 排序 双指针 本题的难点在于如何去除重复解。 算法流程: 1、特判,对于数组长度 n,如果数组为 null 或者数组长度小于 3,返回 []。 2、对数组进行排序。 3、遍历排序后数组: (…...
技术分享 | MySQL内存使用率高问题排查
本文为墨天轮数据库管理服务团队第51期技术分享,内容原创,如需转载请联系小墨(VX:modb666)并注明来源。 一、问题现象 问题实例mysql进程实际内存使用率过高 二、问题排查 2.1 参数检查 mysql版本 :8.0.…...
分享一个精灵图生成和拆分的实现
概述 精灵图(Sprite)是一种将多个小图像合并到单个图像文件中的技术,广泛应用于网页开发、游戏开发和UI设计中。在MapboxGL中,跟之配套的还有一个json文件用来记录图标的大小和位置。本文分享基于Node和sharp库实现精灵图的合并与…...
AI日报 - 2025年3月21日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | OpenAI成立安全委员会,加速AGI治理框架构建 ▎💼 商业动向 | 微软发布医疗大模型DAX Copilot 3.0,覆盖全球临床场景 ▎📜 政策追踪 | 中国发布…...
MongoDB 配合python使用的入门教程
MongoDB 入门教程 1. 安装 MongoDB 首先,你需要在你的机器上安装MongoDB。你可以从 MongoDB官网 下载并安装 Community 版本。安装完成后,启动MongoDB服务。 # 在Linux/Mac上启动MongoDB mongod# 在Windows上,你可以通过Windows服务启动Mo…...
函数:形参和实参
在函数的使用过程中分为实参和形参,实参是主函数实际调用的值而形参则是给实参调用的值,如果函数没被调用则函式不会向内存申请空间,先用一段代码演示 形参: int test(int x ,int y ) {int z 0;z x y;return z; } 为何会叫做…...
【C#知识点详解】ExcelDataReader介绍
今天来给大家介绍一下ExcelDataReader,ExcelDataReader是一个轻量级的可快速读取Excel文件中数据的工具。话不多说直接开始。 ExcelDataReader简介 ExcelDataReader支持.xlsx、.xlsb、.xls、.csv格式文件的读取,版本基本在2007及以上版本,支…...
Vala编程语言教程-控制结构
控制结构 while (a > b) { a--; } 会重复递减a,每次迭代前检查a是否大于b。 do { a--; } while (a > b); 会重复递减a,每次迭代后检查a是否大于b。 for (int a 0; a < 10; a) { stdout.printf("%d\n", a); } 会先将a初始化为0…...
