当前位置: 首页 > news >正文

Spring Boot的配置加载顺序

Spring Boot 的配置加载顺序遵循优先级从高到低的原则,高优先级配置会覆盖低优先级配置,且不同来源的配置会进行合并。理解这个顺序对于排查“配置不生效”的问题至关重要。


核心优先级规则(从高到低)

1. 命令行参数(最高优先级)

通过 --key=value 形式传递,优先级最高。

java -jar myapp.jar --server.port=8081 --spring.profiles.active=prod

2. JNDI 属性

来自 java:comp/env 的 JNDI 属性。

3. Java 系统属性

通过 -D 参数设置。

java -Dserver.port=8081 -jar myapp.jar

4. 操作系统环境变量

SERVER_PORT=8081SPRING_PROFILES_ACTIVE=prod。Spring Boot 支持宽松绑定(Relaxed Binding),环境变量名会自动映射为配置属性名。

5. 配置文件(application.properties / application.yml)

配置文件按以下位置顺序加载(优先级从高到低):

  1. 当前目录下的 /config 子目录(推荐生产环境使用)
  2. 当前目录(JAR 包同级目录)
  3. classpath 下的 /config
  4. classpath 根路径

6. Profile 专用文件

application-{profile}.properties/yml 的优先级高于默认的 application.properties/yml。激活 Profile 后,Profile 专用文件中的同名属性会覆盖默认文件中的配置。

7. @PropertySource 注解

通过 @PropertySource 显式指定的配置文件。

8. 默认属性(最低优先级)

通过 SpringApplication.setDefaultProperties() 设置的默认属性。


配置文件位置优先级详解

优先级 位置(相对于 JAR 包运行目录) 说明
最高 ./config/ JAR 同级目录下的 config 文件夹,推荐生产环境使用
./ JAR 同级目录
classpath:/config/ JAR 包内部 config 包(即 resources/config
最低 classpath:/ JAR 包内部根路径(即 resources 根目录)

实战技巧:将通用配置放在 JAR 包内部,将环境相关配置放在外部 ./config/ 目录中,实现代码可移植性部署灵活性的平衡。


多环境配置加载机制

当激活特定 Profile(如 prod)时,加载顺序为:

  1. 加载 application.yml(公共配置)
  2. 加载 application-prod.yml(Profile 专用配置,覆盖同名属性)

激活 Profile 的方式(优先级从高到低):

  • 命令行参数:--spring.profiles.active=prod
  • 系统环境变量:SPRING_PROFILES_ACTIVE=prod
  • 配置文件:spring.profiles.active=prod

微服务场景:bootstrap 配置文件

在 Spring Cloud 微服务架构中,引入 bootstrap.yml/properties 用于引导阶段的配置加载,优先级高于 application 配置文件:

bootstrap.yml → bootstrap.properties → application.yml → application.properties

bootstrap 配置文件主要用于从配置中心(如 Spring Cloud Config Server)拉取远程配置。


底层原理:PropertySource 机制

Spring Boot 将所有配置源封装为 PropertySource 对象,按优先级顺序存入 EnvironmentpropertySourceListCopyOnWriteArrayList)。当获取属性值时,从前往后遍历,找到第一个匹配的键即返回。这意味着列表中位置靠前的配置源优先级更高。


常见问题排查

Q1:配置属性不生效怎么办?
A:检查是否有更高优先级的配置源覆盖了该属性。使用 --debug 启动应用,查看 Environment 中所有生效的 PropertySource 列表。

Q2:外部配置文件未生效?
A:确认外部配置文件位于正确的目录(./config/./),且文件名必须为 application.properties/yml

Q3:多环境配置未加载?
A:确认 Profile 已正确激活,且 Profile 专用文件命名符合 application-{profile}.properties/yml 规范。


一句话总结

命令行参数 > 环境变量 > 外部配置文件 > 内部配置文件 > Profile 专用文件 > 默认属性。高优先级覆盖低优先级,不同来源的配置进行合并。

http://www.jsqmd.com/news/805831/

相关文章:

  • 最常用的idea插件
  • OpenClaw教程集:从入门到实战的机器人控制学习路径
  • 2026年可靠不锈钢自吸泵品牌TOP10:FJX450轴流泵、FJX500轴流泵、FJX550轴流泵、FJX600轴流泵选择指南 - 优质品牌商家
  • 利用Taotoken模型广场为不同AI应用场景挑选合适模型
  • 2026年Q2宁波别墅全屋原木定制选型指南:为何瑞王铠萨值得关注? - 2026年企业推荐榜
  • 深度解析macOS OBS虚拟摄像头技术架构与高性能视频流传输方案
  • 38_AI短片实战第十一弹:分镜收官——车辆落地精修与峡谷间距的终极控制(附全镜提示词总览)
  • 党建知识竞赛系统推荐:满足各级党组织需求的智能化工具
  • 红外图像处理SoC中ISP设计与验证【附代码】
  • 2026年Q2国内环境第三方检测机构靠谱度综合排行:医药第三方检测/土壤检测/工业品检测/工业品第三方检测/建筑材料检测/选择指南 - 优质品牌商家
  • Excel打开CSV文件中文乱码问题解决方案
  • 解放双手的桌面自动化神器:KeymouseGo鼠标键盘录制工具
  • 蛟三升班必看!!!
  • 【ChatGPT 2026终极前瞻】:12项已确认新功能+3大颠覆性架构升级,仅限首批内测开发者掌握
  • 2026年当下,江夏区专业汽车膜门店的“硬核”选择之道 - 2026年企业推荐榜
  • 该庆幸油车没有智能化了,不用担忧远程锁电或控制,不会无限收费
  • Arm DDT:高性能计算并行程序调试利器
  • 【仅限前500名】Midjourney Gouache风格私藏Prompt库泄露:含9类经典艺术家笔触映射表(Sargent/Feininger/Käthe Kollwitz专属参数包)
  • Steam成就解锁终极指南:免费开源工具快速管理全成就
  • 协同过滤推荐系统实战:从影视推荐到工程选型的算法原理与应用
  • 2026年Q2抗菌内裤技术解析:菌草内衣/蚕丝内裤/透气内裤/儿童内裤/冰丝内衣/冰丝内裤/塑身内衣/女士内裤/选择指南 - 优质品牌商家
  • JPlag代码查重实战指南:突破性技术如何自动化检测代码抄袭
  • 2026年4月月记
  • ARM GIC中断控制器架构与关键寄存器详解
  • 如何远程电脑屏幕监控?分享五个远程屏幕监控方法,小白也能学会
  • 国产DSP多片SAR成像软件与测试系统【附代码】
  • 2026年,7款建筑分包工程管理软件全解析:痛点、选型与落地
  • ARM架构FAR_EL3与FPCR寄存器详解与应用
  • Go语言AI智能体框架Agency:原生构建大语言模型应用
  • FinFET内存测试技术挑战与创新解决方案