在 Spring Boot 开发中,application.properties 和 application.yml 是最常用的两种配置文件格式。随着项目复杂度提升,越来越多团队转向 YAML。那么,它们到底有何不同?今天我们就从定位、语法、数据表达能力、通用性四个角度,系统对比这两种配置方式。
一、定位不同:工具 vs 语言
properties 文件本质上是"属性文件"(Properties File),其设计初衷是在 Java 应用中以键值对的形式存储配置项。它简洁直接,长期以来作为 Spring Boot 默认的配置格式(尤其在 2.x 版本中)。
而 YAML (YAML Ain't Markup Language,原意为 "Yet Another Markup Language")则是一种通用的数据序列化格式,定位远不止于"配置属性"。它旨在以人类可读的方式表达结构化数据,适用于多种场景和语言。
一句话总结:
properties是一个配置工具,YAML 是一种表达结构化数据的语言。
二、语法风格:扁平 vs 层级
properties 语法
采用经典的 key=value 格式,每行一个配置项:
ini
server.port=8080
debug=true
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
YAML 语法
使用缩进和冒号表示层级关系,冒号后必须跟一个空格:
yaml
server:
port: 9090
debug: true
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
✅ 优势:YAML 层级清晰、结构直观,尤其在配置嵌套属性时,可读性和维护性显著优于 properties。
三、复杂数据类型支持:YAML 更强大
除了基本的字符串、数字、布尔值,YAML 原生支持对象、列表、Map 等复杂结构,无需额外解析逻辑。
示例:配置对象
yaml
user:
id: 1
name: Tom
age: 20
示例:配置列表
markdown
# 列表写法一(推荐)
animals:
- Dog
- Cat
- Bird
# 列表写法二(行内)
animals: [Dog, Cat, Bird]
相比之下,properties 虽可通过 list[0]=Dog 等方式模拟集合,但语法繁琐且易出错,远不如 YAML 自然。
对比:properties 模拟列表(不直观)
css
animals[0]=Dog
animals[1]=Cat
animals[2]=Bird
四、YAML 具备跨语言通用性
properties 是 Java 生态特有的配置格式,几乎仅用于 JVM 项目。
而 YAML 是一种语言无关的数据格式,被广泛应用于 Python、JavaScript、Go、Ruby、PHP 等多种编程语言中。
这意味着:在多语言微服务架构中,若使用统一的配置中心(如 Nacos、Apollo),各团队可共享同一份 YAML 配置文件,极大提升协作效率与运维一致性。
总结
| 维度 | properties | YAML |
|---|---|---|
| 定位 | Java 属性配置 | 通用数据序列化语言 |
| 语法 | key=value,扁平结构 |
key: value,支持嵌套与缩进 |
| 数据类型 | 仅基础类型 | 支持对象、列表、Map 等复杂结构 |
| 通用性 | 仅限 Java/Spring | 多语言通用 |
虽然 Spring Boot 同时支持两种格式,但从可读性、表达力和生态兼容性来看,YAML 显然是更现代、更优雅的选择。如果你的新项目尚未选定配置格式,不妨大胆拥抱 YAML!
💡 小贴士 :Spring Boot 会优先加载
application.yml(如果存在),若两者共存,YAML 配置将覆盖 properties 中的同名项。