彻底搞懂 Spring Boot 中 properties 和 YAML 的区别

在 Spring Boot 开发中,application.propertiesapplication.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 中的同名项。

相关推荐
qq_12498707532 小时前
基于springboot的幼儿园家校联动小程序的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·微信小程序·小程序
武子康2 小时前
大数据-189 Nginx JSON 日志接入 ELK:ZK+Kafka+Elasticsearch 7.3.0+Kibana 实战搭建
大数据·后端·elasticsearch
断春风2 小时前
订单超时自动取消系统架构解析
后端·系统架构
Angletank3 小时前
SpringBoot中ORM组件通过JAP组件的使用
spring boot·后端·orm·jpa
moxiaoran57533 小时前
Go语言的map
开发语言·后端·golang
小信啊啊3 小时前
Go语言数组
开发语言·后端·golang
白宇横流学长3 小时前
基于SpringBoot实现的零食销售商城设计与实现【源码+文档】
java·spring boot·后端
superman超哥3 小时前
仓颉语言中异常捕获机制的深度剖析与工程实践
c语言·开发语言·后端·python·仓颉
驱动探索者3 小时前
[缩略语大全]之[INTEL]篇
java·后端·spring·intel