Spring Boot 配置文件加载优先级全解析

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取


Spring Boot 配置文件加载优先级全解析

Spring Boot 的配置文件加载机制是开发者管理不同环境配置的核心功能之一。其通过外部化配置(Externalized Configuration)支持从多种来源加载配置属性,并按照明确的优先级顺序进行覆盖。本文将从基础概念、优先级顺序、配置源解析到最佳实践,全面梳理 Spring Boot 的配置加载规则。


一、Spring Boot 配置加载的核心原则

Spring Boot 的配置加载遵循两个核心原则:

  1. 优先级覆盖:高优先级配置源的属性会覆盖低优先级的同名属性。
  2. 互补配置:不同配置源的属性可以互补,仅当存在同名属性时才会触发覆盖逻辑。

二、配置源及其优先级顺序

以下是 Spring Boot 支持的配置源及其从高到低的优先级顺序(基于 Spring Boot 2.7+):

优先级配置源说明
1命令行参数(Command Line Args)通过 --key=value 传递,如 java -jar app.jar --server.port=8081
2SPRING_APPLICATION_JSON环境变量或系统属性中的 JSON 格式配置(支持内联或文件路径)
3JNDI 属性(java:comp/env从 JNDI 上下文获取的配置
4ServletConfig 初始化参数web.xml 或 Servlet 3+ 的 @WebServlet 中定义的参数
5ServletContext 初始化参数类似 ServletConfig,但作用于整个应用上下文
6JVM 系统属性(-D参数)-Dspring.datasource.url=jdbc:mysql://localhost/db
7操作系统环境变量export SERVER_PORT=8081(需转换为大写+下划线格式)
8Profile-specific 配置文件application-{profile}.propertiesapplication-{profile}.yml
9默认配置文件项目中的 application.propertiesapplication.yml
10@PropertySource 注解@Configuration 类上通过注解加载的配置文件
11默认属性(SpringApplication.setDefaultProperties通过代码设置的默认属性

三、关键配置源详解
1. 命令行参数
  • 最高优先级,适合临时覆盖配置。
  • 示例:java -jar app.jar --server.port=9090 --logging.level.root=DEBUG
2. 环境变量
  • 常用于容器化部署(如 Docker/K8s)。
  • 属性名需转换为大写+下划线,如 spring.datasource.urlSPRING_DATASOURCE_URL
3. Profile-specific 配置文件
  • 通过 spring.profiles.active 激活指定 Profile。
  • 文件命名格式为 application-{profile}.yml,如 application-dev.yml
  • Profile 配置优先级高于默认配置,但低于更高级别的配置源。
4. 默认配置文件
  • application.yml 优先级高于 application.properties(若两者存在同名属性)。
  • 支持从以下位置加载(按优先级排序):
    1. 项目根目录的 /config 子目录
    2. 项目根目录
    3. Classpath 下的 /config 目录
    4. Classpath 根目录
5. @PropertySource
  • 用于加载自定义配置文件,但优先级较低。
  • 示例:
    @Configuration
    @PropertySource("classpath:custom.properties")
    public class AppConfig { }
    

四、版本差异与注意事项
  1. Spring Boot 2.4+ 的变化

    • 废弃了 spring.config.locationspring.config.additional-location 的部分行为。
    • 支持 spring.config.import 显式导入配置(如 spring.config.import=configtree:/etc/config/)。
  2. 多文档 YAML 文件

    • 可在单个 YAML 文件中通过 --- 分隔不同 Profile 的配置。
    • 示例:
      server:port: 8080
      ---
      spring:profiles: dev
      server:port: 8081
      

五、最佳实践
  1. 按环境分离配置

    • 使用 application-dev.ymlapplication-prod.yml 管理不同环境。
    • 通过 spring.profiles.active=dev 激活 Profile。
  2. 优先使用外部化配置

    • 避免硬编码配置,将敏感信息(如数据库密码)通过环境变量或云平台密钥管理服务注入。
  3. 谨慎使用命令行参数

    • 仅用于临时调试,生产环境建议通过环境变量或配置文件管理。
  4. 自定义配置位置

    • 启动时指定 --spring.config.location=classpath:/default/,file:./external-config/

六、常见问题
  1. 属性未生效?

    • 检查是否有更高优先级的配置源覆盖了当前配置。
    • 使用 Environment 端点(需开启 management.endpoints.web.exposure.include=env)查看最终生效的配置。
  2. 多 Profile 如何叠加?

    • 同时激活多个 Profile(如 spring.profiles.active=dev,db-mysql),配置会按字母顺序加载并合并。
  3. 如何禁用默认配置文件?

    • 设置 spring.config.name=__dummy__(加载一个不存在的文件)。

七、总结

Spring Boot 的配置加载机制通过灵活的优先级规则,为多环境配置管理提供了强大支持。理解其加载顺序和覆盖逻辑,能够帮助开发者避免配置冲突,提升应用的可维护性。在实际项目中,建议结合容器化部署和配置中心(如 Spring Cloud Config),实现更高效的配置管理。

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

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

相关文章

2025 年陕西消防设施操作员考试攻略:历史文化名城的消防传承与创新​

陕西拥有丰富的历史文化遗产,众多古建筑分布其中,同时也在不断推进现代化建设,消防工作面临传承与创新的双重任务,这在考试中也有所体现。​ 考点融合与特色:一方面,古建筑的消防保护是重点,包…

【Unity网络编程知识】C#的 Http相关类学习

1、搭建HTTP服务器 使用别人做好的HTTP服务器软件,一般作为资源服务器时使用该方式(学习阶段建议使用)自己编写HTTP服务器应用程序,一般作为Web服务器或者短连接游戏服务器时使用该方式(工作后由后端程序员来做&#…

Android Studio - 解决 Please Select Android SDK

一、出现的问题 点击 Run 后弹窗,图一位置出现图二提示。 二、解决办法 进入 Tools -> SDK Manager,在 Android SDK Location 点击 Edit,一直 Next 就解决了。

UE5学习笔记 FPS游戏制作44 统一UI大小 sizeBox

如果我们希望多个类似的UI大小一样,例如不同菜单的标题,可以使用sizeBox组件 我们在标题控件上,用sizeBox包裹所有子物体 然后指定他的最小宽高,或最大宽高 如果指定的是最小宽高,当子元素(如图片&#xf…

MCP协议介绍

MCP协议(Model Context Protocol,模型上下文协议)是由Anthropic公司推出的开放协议,旨在为AI大模型与外部数据源、工具之间建立标准化交互框架。其核心价值在于突破传统API限制,通过统一接口实现AI与多源数据、工具的双…

C#里使用WPF的MaterialDesignThemes

先要下载下面的包: <?xml version="1.0" encoding="utf-8"?> <packages><package id="MaterialDesignColors" version="5.2.1" targetFramework="net48" /><package id="MaterialDesignTheme…

基于 Spring Boot 瑞吉外卖系统开发(四)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;四&#xff09; 新增分类 新增分类UI界面&#xff0c;两个按钮分别对应两个UI界面 两个页面所需的接口都一样&#xff0c;请求参数type值不一样&#xff0c;type1为菜品分类&#xff0c;type2为套餐分类。 请求方法都为POST。…

神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)

内容未发表论文基于脉冲耦合神经网络(PCNN)的图像特征提取与匹配研究 摘要 本文提出一种基于脉冲耦合神经网络(Pulse-Coupled Neural Network, PCNN)的图像特征提取与匹配方法。通过模拟生物视觉皮层神经元的脉冲同步发放特性,PCNN能够有效捕捉图像纹理与边缘特征。实验表…

LeetCode 252 会议室题全解析:Swift 实现 + 场景还原

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在这篇文章中&#xff0c;我们将深入探讨LeetCode第252题“会议室”的问题&#xff0c;提供一个用Swift编写的解决方案&#xff0c;并结合实际场景进行分析。通过这篇文章&#xff0c;你将…

HBuilder运行uni-app程序报错【Error: listen EACCES: permission denied 0.0.0.0:5173】

一、错误提示&#xff1a; 当使用HBuilder运行uni-app项目的时候提示了如下错误❌ 15:11:03.089 项目 project 开始编译 15:11:04.404 请注意运行模式下&#xff0c;因日志输出、sourcemap 以及未压缩源码等原因&#xff0c;性能和包体积&#xff0c;均不及发行模式。 15:11:04…

Flink框架:批处理和流式处理与有界数据和无界数据之间的关系

本文重点 从数据集的类型来看&#xff0c;数据集可以分为有界数据和无界数据两种&#xff0c;从处理方式来看&#xff0c;有批处理和流处理两种。一般而言有界数据常常使用批处理方式&#xff0c;无界数据往往使用流处理方式。 有界数据和无界数据 有界数据有一个明确的开始和…

虚拟列表react-virtualized使用(npm install react-virtualized)

1. 虚拟化列表 (List) // 1. 虚拟化列表 (List)import { List } from react-virtualized; import react-virtualized/styles.css; // 只导入一次样式// 示例数据 const list Array(1000).fill().map((_, index) > ({id: index,name: Item ${index},description: This is i…

IT+开发+业务一体化:AI驱动的ITSM解决方案Jira Service Management价值分析(文末免费获取报告)

本文来源atlassian.com&#xff0c;由Atlassian全球白金合作伙伴、DevSecOps解决方案提供商-龙智翻译整理。 无论是支持内部员工、处理突发事件还是批准变更申请&#xff0c;服务团队的每一分钟都至关重要。您的企业是否做好了充分准备&#xff1f; 许多企业仍然依赖传统的IT服…

leetcode刷题日记——167. 两数之和 II - 输入有序数组

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求求数值numbers中的和为 target 的两个数的下标最简单的思路就是暴力求解&#xff0c;两两挨个组合&#xff0c;但时间复杂度为O(n2)&#xff0c;不一定能通过因为数组为非递减&#xff0c;那我们可以使用双指针&#…

【Leetcode-Hot100】盛最多水的容器

题目 解答 目的是求面积最大&#xff0c;面积是由两个下标和对应的最小值得到&#xff0c;因此唯一的问题就是如何遍历这两个下标。我采用begin和end两个变量&#xff0c;确保begin是小于end的&#xff0c;使用它们二者求面积&#xff0c;代码如下&#xff1a; 很不幸 出错了…

dify文本生成图片

安装Stability 授权 Stability AI - Developer Platform Stability AI - Developer Platform 创建智能体 模型要选好点的&#xff0c;要不可能会生成失败。

前端开发中的问题排查与定位:HTML、CSS、JavaScript(报错的解决方式)

目录 1.html 1. 结构错误调试&#xff1a;标签未正确嵌套 2. 语法问题调试&#xff1a;缺失引号 3. 断点调试&#xff1a;动态生成内容时的 JavaScript 错误 4. 网络调试&#xff1a;资源加载错误 5. 性能调试&#xff1a;页面加载性能 总结&#xff1a; 2.CSS 1. 定位…

Spring MVC 重定向(Redirect)详解

Spring MVC 重定向&#xff08;Redirect&#xff09;详解 1. 核心概念与作用 重定向&#xff08;Redirect&#xff09; 是 Spring MVC 中一种客户端重定向机制&#xff0c;通过 HTTP 302 状态码&#xff08;默认&#xff09;将用户浏览器重定向到指定 URL。 主要用途&#xf…

《深入探秘:分布式软总线自发现、自组网技术原理》

在当今数字化浪潮中&#xff0c;分布式系统的发展日新月异&#xff0c;而分布式软总线作为实现设备高效互联的关键技术&#xff0c;其自发现与自组网功能宛如打开智能世界大门的钥匙&#xff0c;为多设备协同工作奠定了坚实基础。 分布式软总线的重要地位 分布式软总线是构建…

eplan许可证的用户权限管理

在电气设计领域&#xff0c;EPLAN软件以其强大的功能和灵活性而备受用户青睐。然而&#xff0c;随着企业规模的扩大和团队人数的增加&#xff0c;如何确保软件使用的安全与效率成为了一个重要的问题。EPLAN许可证的用户权限管理功能为此提供了完美的解决方案。本文将详细介绍EP…