博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。
② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。
③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。
进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。
群公告里还有全网大赛约稿汇总/博客提效工具集/CSDN自动化运营脚本 有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
文章目录
-
- [1. 导读与文章目标](#1. 导读与文章目标)
-
- [1.1 文章目标](#1.1 文章目标)
- [1.2 适用读者](#1.2 适用读者)
- [2. 配置文件格式基础对比](#2. 配置文件格式基础对比)
-
- [2.1 基本语法层级结构](#2.1 基本语法层级结构)
-
- [2.1.1 application.properties](#2.1.1 application.properties)
- [2.1.2 application.yml](#2.1.2 application.yml)
- [3. 配置结构对比:嵌套与列表](#3. 配置结构对比:嵌套与列表)
-
- [3.1 嵌套对象表达](#3.1 嵌套对象表达)
-
- [3.1.1 properties 表达复杂结构](#3.1.1 properties 表达复杂结构)
- [3.1.2 YAML 表达复杂结构(推荐)](#3.1.2 YAML 表达复杂结构(推荐))
- [3.2 Mermaid 比较图](#3.2 Mermaid 比较图)
- [4. 多环境配置:profiles 使用方式](#4. 多环境配置:profiles 使用方式)
-
- [4.1 properties 方式](#4.1 properties 方式)
- [4.2 YAML 方案(更简洁)](#4.2 YAML 方案(更简洁))
- [5. 在 Spring Boot 中的加载顺序](#5. 在 Spring Boot 中的加载顺序)
-
- [5.1 官方顺序(简化版)](#5.1 官方顺序(简化版))
- [5.2 Mermaid 顺序图](#5.2 Mermaid 顺序图)
- [6. 配置绑定:@Value vs @ConfigurationProperties](#6. 配置绑定:@Value vs @ConfigurationProperties)
-
- [6.1 properties 与 yml 都支持](#6.1 properties 与 yml 都支持)
-
- [6.1.1 @Value 示例](#6.1.1 @Value 示例)
- [6.1.2 @ConfigurationProperties 示例](#6.1.2 @ConfigurationProperties 示例)
- [7. 哪种方式更受社区推荐?](#7. 哪种方式更受社区推荐?)
-
- [7.1 官方更推荐 YAML](#7.1 官方更推荐 YAML)
- [7.2 但 properties 仍具价值](#7.2 但 properties 仍具价值)
- [8. 表格总结:properties vs yml 全面对比](#8. 表格总结:properties vs yml 全面对比)
- [9. 常见坑点与最佳实践](#9. 常见坑点与最佳实践)
-
- [9.1 YAML 容易踩的坑](#9.1 YAML 容易踩的坑)
-
- [9.1.1 缩进错误](#9.1.1 缩进错误)
- [9.1.2 Tab 键禁用](#9.1.2 Tab 键禁用)
- [9.2 properties 容易踩的坑](#9.2 properties 容易踩的坑)
-
- [9.2.1 字符串包含等号需要转义](#9.2.1 字符串包含等号需要转义)
- [10. 真实业务中的推荐实践](#10. 真实业务中的推荐实践)
-
- [10.1 小型项目(个人、小工具)](#10.1 小型项目(个人、小工具))
- [10.2 中大型业务系统](#10.2 中大型业务系统)
- [10.3 配置覆盖策略](#10.3 配置覆盖策略)
- 结束语

1. 导读与文章目标
1.1 文章目标
本篇文章旨在从多个角度深入探讨 application.properties 与 application.yml,覆盖但不限于:
- 语法层面差异
- 可读性与维护性
- 多环境配置策略
- 配置注入、层级结构表达
- 复杂配置场景(多维结构、列表、Map)
- 与 Spring Boot 官方推荐的使用方式
- 高级技巧与避坑指南
1.2 适用读者
- Spring Boot 初学者
- 对配置管理有更高要求的后端工程师
- 架构师、技术负责人
- 希望写出更规范、更可维护项目的开发者
2. 配置文件格式基础对比
2.1 基本语法层级结构
2.1.1 application.properties
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 是一种更现代、更表达式的配置格式,支持嵌套结构与列表。
示例:
yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
username: root
YAML 特点:
| 特性 | 描述 |
|---|---|
| 层级结构通过缩进表达 | 更贴近对象结构 |
| 原生支持 List、Map | 无需展开 |
| 可读性高,适合复杂配置 |
3. 配置结构对比:嵌套与列表
3.1 嵌套对象表达
这部分是 YAML 完胜 properties 的典型场景。
3.1.1 properties 表达复杂结构
properties
user.address.city=Shanghai
user.address.street=East Road
user.roles[0]=admin
user.roles[1]=editor
非常冗长,不够直观。
3.1.2 YAML 表达复杂结构(推荐)
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 方式
properties
spring.profiles.active=dev
多环境:
application-dev.properties
application-prod.properties
4.2 YAML 方案(更简洁)
yaml
spring:
profiles:
active: dev
甚至支持多配置块合并:
yaml
server:
port: 8000
---
spring:
profiles: dev
server:
port: 8001
---
spring:
profiles: prod
server:
port: 9001
5. 在 Spring Boot 中的加载顺序
理解加载顺序至关重要,不同环境下配置冲突时,知道谁覆盖谁能避免线上事故。
5.1 官方顺序(简化版)
text
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 示例
java
@Value("${user.address.city}")
private String city;
适用于:简单值注入。
6.1.2 @ConfigurationProperties 示例
示例 YAML:
yaml
user:
name: Jack
age: 20
address:
city: Shenzhen
Java 绑定:
java
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {
private String name;
private Integer age;
private Address address;
@Data
public static class Address {
private String city;
}
}
7. 哪种方式更受社区推荐?
7.1 官方更推荐 YAML
原因:
- 配置清晰,层次结构更明显
- 更适合复杂配置(Redis、Kafka、微服务配置)
- 支持多 profile 合并写法
7.2 但 properties 仍具价值
尤其在:
- 小项目
- 工具类
- DevOps 配置大量使用 properties
- IDE 搜索更精确(键名搜索)
8. 表格总结:properties vs yml 全面对比
| 对比项 | application.properties | application.yml |
|---|---|---|
| 表达结构 | 平铺键值对 | 分层结构,缩进表达 |
| 可读性 | 中 | 高 |
| 列表表达 | 不友好 | 原生支持 |
| 复杂配置 | 不推荐 | 强烈推荐 |
| 维护成本 | 中等 | 更低 |
| 官方示例 | 较少 | 较多 |
| 搜索友好度 | 强 | 一般 |
| 常用场景 | 小型项目 | 中大型项目、微服务 |
| 多 profile | 文件分离 | 单文件合并支持 |
| 可扩展性 | 中 | 高 |
9. 常见坑点与最佳实践
9.1 YAML 容易踩的坑
9.1.1 缩进错误
示例(错误):
yaml
user:
name: Tom
必须是 2 个空格缩进:
yaml
user:
name: Tom
9.1.2 Tab 键禁用
YAML 不允许使用 Tab。
9.2 properties 容易踩的坑
9.2.1 字符串包含等号需要转义
properties
password=p@ss=123 # 可能被解析异常
10. 真实业务中的推荐实践
10.1 小型项目(个人、小工具)
- 使用
application.properties - 原因:结构简单,文件短小,IDE 搜索友好
10.2 中大型业务系统
- 使用
application.yml - 特别适合以下场景:
- Redis、Kafka、RabbitMQ 多实例管理
- 微服务配置大量嵌套结构
- 多环境配置需要合并
10.3 配置覆盖策略
优先级顺序:
云配置 > 外部 yml > 内部 yml > properties > 默认值
如果你需要我进一步批量处理格式、自动转换为 Markdown 或生成 PDF,也可以继续告诉我。
结束语

👨💻 关于我
持续学习 | 追求真我
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
感谢订阅专栏 三连文章

掘金点击访问Qiuner CSDN点击访问Qiuner GitHub点击访问Qiuner Gitee点击访问Qiuner
| 专栏 | 简介 |
|---|---|
| 📊 一图读懂系列 | 图文并茂,轻松理解复杂概念 |
| 📝 一文读懂系列 | 深入浅出,全面解析技术要点 |
| 🌟持续更新 | 保持学习,不断进步 |
| 🎯 人生经验 | 经验分享,共同成长 |
你好,我是Qiuner. 为帮助别人少走弯路而写博客
如果本篇文章帮到了你 不妨点个赞 吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
代码都在Github或Gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍
如果你遇到了问题,自己没法解决,可以去我掘金评论区问。CSDN评论区和私信消息看不完 掘金消息少一点.
| 上一篇推荐 | 链接 |
|---|---|
| Java程序员快又扎实的学习路线 | 点击该处自动跳转查看哦 |
| 一文读懂 AI | 点击该处自动跳转查看哦 |
| 一文读懂 服务器 | 点击该处自动跳转查看哦 |
| 2024年创作回顾 | 点击该处自动跳转查看哦 |
| 一文读懂 ESLint配置 | 点击该处自动跳转查看哦 |
| 老鸟如何追求快捷操作电脑 | 点击该处自动跳转查看哦 |
| 未来会写什么文章? | 预告链接 |
|---|---|
| 一文读懂 XX? | 点击该处自动跳转查看哦 |
| 2025年终总结 | 点击该处自动跳转查看哦 |
| 一图读懂 XX? | 点击该处自动跳转查看哦 |
