Spring Boot 进阶:application.properties 与 application.yml 的全方位对比与最佳实践

Spring Boot 进阶:application.properties 与 application.yml 的全方位对比与最佳实践
博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送ZEEKLOG评论防封脚本,送真活跃粉丝,助你提升文章热度。 群公告里还有全网大赛约稿汇总/博客提效工具集/ZEEKLOG自动化运营脚本 有兴趣的加文末联系方式,备注自己的ZEEKLOG昵称,拉你进群,互相学习共同进步。 

文章目录

1. 导读与文章目标

1.1 文章目标

本篇文章旨在从多个角度深入探讨 application.propertiesapplication.yml,覆盖但不限于:

  • 语法层面差异
  • 可读性与维护性
  • 多环境配置策略
  • 配置注入、层级结构表达
  • 复杂配置场景(多维结构、列表、Map)
  • 与 Spring Boot 官方推荐的使用方式
  • 高级技巧与避坑指南

1.2 适用读者

  • Spring Boot 初学者
  • 对配置管理有更高要求的后端工程师
  • 架构师、技术负责人
  • 希望写出更规范、更可维护项目的开发者

2. 配置文件格式基础对比

2.1 基本语法层级结构

2.1.1 application.properties

properties 本质上是 “键值对平铺结构”。

示例:

server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root 

它的特点:

特性描述
层级结构用“点”展开spring.datasource.url
不支持复杂结构(List、Map)需要手动展开
不支持注释块只支持 # 单行注释
2.1.2 application.yml

YAML 是一种更现代、更表达式的配置格式,支持嵌套结构与列表。

示例:

server:port:8080spring:datasource:url: jdbc:mysql://localhost:3306/demo username: root 

YAML 特点:

特性描述
层级结构通过缩进表达更贴近对象结构
原生支持 List、Map无需展开
可读性高,适合复杂配置

3. 配置结构对比:嵌套与列表

3.1 嵌套对象表达

这部分是 YAML 完胜 properties 的典型场景。

3.1.1 properties 表达复杂结构
user.address.city=Shanghai user.address.street=East Road user.roles[0]=admin user.roles[1]=editor 

非常冗长,不够直观。

3.1.2 YAML 表达复杂结构(推荐)
user:address:city: Shanghai street: East Road roles:- admin - editor 

3.2 Mermaid 比较图

application.properties平铺结构列表需按下标展开阅读复杂配置困难application.yml缩进表达层级天然支持列表适合复杂场景

图 1:properties 与 yml 结构表达能力对比


4. 多环境配置:profiles 使用方式

4.1 properties 方式

spring.profiles.active=dev 

多环境:

application-dev.properties application-prod.properties 

4.2 YAML 方案(更简洁)

spring:profiles:active: dev 

甚至支持多配置块合并:

server:port:8000---spring:profiles: dev server:port:8001---spring:profiles: prod server:port:9001

5. 在 Spring Boot 中的加载顺序

理解加载顺序至关重要,不同环境下配置冲突时,知道谁覆盖谁能避免线上事故。

5.1 官方顺序(简化版)

1. 命令行参数(优先级最高) 2. application.properties / yml(classpath) 3. 外部配置文件(优先级更高) 4. @PropertySource 5. @ConfigurationProperties 默认值 

5.2 Mermaid 顺序图

命令行参数外部 application.yml内部 application.yml@ConfigurationProperties覆盖覆盖覆盖命令行参数外部 application.yml内部 application.yml@ConfigurationProperties


6. 配置绑定:@Value vs @ConfigurationProperties

6.1 properties 与 yml 都支持

但 YAML 在对象绑定时可读性更强。

6.1.1 @Value 示例
@Value("${user.address.city}")privateString city;

适用于:简单值注入。

6.1.2 @ConfigurationProperties 示例

示例 YAML:

user:name: Jack age:20address:city: Shenzhen 

Java 绑定:

@ConfigurationProperties(prefix ="user")@DatapublicclassUserConfig{privateString name;privateInteger age;privateAddress address;@DatapublicstaticclassAddress{privateString city;}}

7. 哪种方式更受社区推荐?

7.1 官方更推荐 YAML

原因:

  1. 配置清晰,层次结构更明显
  2. 更适合复杂配置(Redis、Kafka、微服务配置)
  3. 支持多 profile 合并写法

7.2 但 properties 仍具价值

尤其在:

  • 小项目
  • 工具类
  • DevOps 配置大量使用 properties
  • IDE 搜索更精确(键名搜索)

8. 表格总结:properties vs yml 全面对比

对比项application.propertiesapplication.yml
表达结构平铺键值对分层结构,缩进表达
可读性
列表表达不友好原生支持
复杂配置不推荐强烈推荐
维护成本中等更低
官方示例较少较多
搜索友好度一般
常用场景小型项目中大型项目、微服务
多 profile文件分离单文件合并支持
可扩展性

9. 常见坑点与最佳实践

9.1 YAML 容易踩的坑

9.1.1 缩进错误

示例(错误):

user:name: Tom 

必须是 2 个空格缩进:

user:name: Tom 
9.1.2 Tab 键禁用

YAML 不允许使用 Tab。

9.2 properties 容易踩的坑

9.2.1 字符串包含等号需要转义
password=p@ss=123 # 可能被解析异常 

10. 真实业务中的推荐实践

10.1 小型项目(个人、小工具)

  • 使用 application.properties
  • 原因:结构简单,文件短小,IDE 搜索友好

10.2 中大型业务系统

  • 使用 application.yml
  • 特别适合以下场景:
    • Redis、Kafka、RabbitMQ 多实例管理
    • 微服务配置大量嵌套结构
    • 多环境配置需要合并

10.3 配置覆盖策略

优先级顺序:

云配置 > 外部 yml > 内部 yml > properties > 默认值 

如果你需要我进一步批量处理格式、自动转换为 Markdown 或生成 PDF,也可以继续告诉我。

结束语

👨‍💻 关于我

持续学习 | 追求真我

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

感谢订阅专栏 三连文章

image-20251011155556997

掘金点击访问QiunerZEEKLOG点击访问QiunerGitHub点击访问QiunerGitee点击访问Qiuner

专栏简介
📊 一图读懂系列图文并茂,轻松理解复杂概念
📝 一文读懂系列深入浅出,全面解析技术要点
🌟持续更新保持学习,不断进步
🎯 人生经验经验分享,共同成长
你好,我是Qiuner. 为帮助别人少走弯路而写博客

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在Github或Gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。ZEEKLOG评论区和私信消息看不完 掘金消息少一点.
上一篇推荐链接
Java程序员快又扎实的学习路线点击该处自动跳转查看哦
一文读懂 AI点击该处自动跳转查看哦
一文读懂 服务器点击该处自动跳转查看哦
2024年创作回顾点击该处自动跳转查看哦
一文读懂 ESLint配置点击该处自动跳转查看哦
老鸟如何追求快捷操作电脑点击该处自动跳转查看哦
未来会写什么文章?预告链接
一文读懂 XX?点击该处自动跳转查看哦
2025年终总结点击该处自动跳转查看哦
一图读懂 XX?点击该处自动跳转查看哦

Read more

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

这篇教程会带你用最简单的方式:**只用一份 docker-compose,一次命令,5 分钟以内完成 AstrBot + NapCat 部署,把 DeepSeekAI 接入你的 QQ。**AstrBot 本身就是为 AI 而生的现代化机器人框架,插件丰富、支持 DeepSeek/OpenAI 等大模型、带 WebUI、可扩展性强,真正做到"搭好就能用"。照着做,你马上就能拥有属于自己的 QQ AI 机器人。 1 项目介绍 1.1 AstrBot是什么? GitHub 仓库:https://github.com/AstrBotDevs/AstrBot AstrBot 是一个专为 AI 大模型设计的开源聊天机器人框架,

By Ne0inhk
Neo4j-Desktop2.0安装教程(更改安装路径)

Neo4j-Desktop2.0安装教程(更改安装路径)

引言        由于neo4j-desktop2.0版本是不提供安装页面(默认安装在C盘),从而让你选择安装路径的,这对于C盘内存来说是灾难性的。因此,需要手动设置安装路径。 参考文献: 1. https://zhuanlan.zhihu.com/p/1935104156433121644https://zhuanlan.zhihu.com/p/1935104156433121644 2. https://blog.ZEEKLOG.net/WMXJY/article/details/150649084 安装包下载:https://neo4j.com/deployment-center/?desktop-gdbhttps://neo4j.com/deployment-center/?desktop-gdb 1文件夹创建及环境变量设置     首先需要在C盘以外的位置先创建一个Neo4j2文件夹,再在下面创建两个文件夹:App,PROData来存放软件本体和相关数据 然后打开“高级系统设置”——“环境变量”——系统变量下方的“新建”

By Ne0inhk
手把手教你配置飞书 OpenClaw 机器人,打造企业级 AI 智能助手

手把手教你配置飞书 OpenClaw 机器人,打造企业级 AI 智能助手

目标:在飞书(Feishu/Lark)中添加 OpenClaw 机器人,实现 7×24 小时 AI 智能对话与自动化办公。 OpenClaw GitHub | feishu-openclaw 桥接项目 想让你的机器人具备语音交互能力?试试 Seeed Studio 的 ReSpeaker 系列吧! 我会后续出reSpeaker XVF3800与Openclaw联动实现语音输入的教程,完全开放源码。 reSpeaker XVF3800 是一款基于 XMOS XVF3800 芯片的专业级 4 麦克风圆形阵列麦克风,即使在嘈杂的环境中也能清晰地拾取目标语音。它具备双模式、360° 远场语音拾取(最远 5 米)、自动回声消除 (AEC)、自动增益控制 (AGC)、声源定位 (DoA)、去混响、波束成形和噪声抑制等功能。

By Ne0inhk

OpenClaw实战系列01:OpenClaw接入飞书机器人全接入指南 + Ollama本地大模型

文章目录 * 引言 * 第一步:环境准备与核心思想 * 第二步:部署Ollama——把大模型“养”在本地 * 1. 安装 Ollama * 2. 拉取并运行模型 * 3. 确认API可用性 * 第三步:安装OpenClaw——AI大脑的“躯干” * 1. 安装Node.js * 2. 一键安装 OpenClaw * 3. 验证安装 * 第四步:打通飞书——创建并配置机器人 * 1. 创建飞书应用 * 2. 配置机器人能力 * 3. 发布应用 * 第五步:OpenClaw与飞书“握手” * 方法一:使用 onboard 向导重新配置(推荐最新版) * 方法二:手动添加渠道 * 批准配对 * 第六步:实战测试与玩法拓展

By Ne0inhk