一文徹底搞懂Spring?Boot中properties和YAML的區(qū)別
前言
在 Spring Boot 開(kāi)發(fā)中,application.properties 和 application.yml 是最常用的兩種配置文件格式。隨著項(xiàng)目復(fù)雜度提升,越來(lái)越多團(tuán)隊(duì)轉(zhuǎn)向 YAML。那么,它們到底有何不同?今天我們就從定位、語(yǔ)法、數(shù)據(jù)表達(dá)能力、通用性四個(gè)角度,系統(tǒng)對(duì)比這兩種配置方式。
一、定位不同:工具 vs 語(yǔ)言
properties 文件本質(zhì)上是“屬性文件”(Properties File),其設(shè)計(jì)初衷是在 Java 應(yīng)用中以鍵值對(duì)的形式存儲(chǔ)配置項(xiàng)。它簡(jiǎn)潔直接,長(zhǎng)期以來(lái)作為 Spring Boot 默認(rèn)的配置格式(尤其在 2.x 版本中)。
而 YAML(YAML Ain’t Markup Language,原意為 “Yet Another Markup Language”)則是一種通用的數(shù)據(jù)序列化格式,定位遠(yuǎn)不止于“配置屬性”。它旨在以人類(lèi)可讀的方式表達(dá)結(jié)構(gòu)化數(shù)據(jù),適用于多種場(chǎng)景和語(yǔ)言。
一句話總結(jié):
properties是一個(gè)配置工具,YAML 是一種表達(dá)結(jié)構(gòu)化數(shù)據(jù)的語(yǔ)言。
二、語(yǔ)法風(fēng)格:扁平 vs 層級(jí)
properties 語(yǔ)法
采用經(jīng)典的 key=value 格式,每行一個(gè)配置項(xiàng):
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 語(yǔ)法
使用縮進(jìn)和冒號(hào)表示層級(jí)關(guān)系,冒號(hào)后必須跟一個(gè)空格:
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? 優(yōu)勢(shì):YAML 層級(jí)清晰、結(jié)構(gòu)直觀,尤其在配置嵌套屬性時(shí),可讀性和維護(hù)性顯著優(yōu)于 properties。
三、復(fù)雜數(shù)據(jù)類(lèi)型支持:YAML 更強(qiáng)大
除了基本的字符串、數(shù)字、布爾值,YAML 原生支持對(duì)象、列表、Map 等復(fù)雜結(jié)構(gòu),無(wú)需額外解析邏輯。
示例:配置對(duì)象
user: id: 1 name: Tom age: 20
示例:配置列表
# 列表寫(xiě)法一(推薦) animals: - Dog - Cat - Bird # 列表寫(xiě)法二(行內(nèi)) animals: [Dog, Cat, Bird]
相比之下,properties 雖可通過(guò) list[0]=Dog 等方式模擬集合,但語(yǔ)法繁瑣且易出錯(cuò),遠(yuǎn)不如 YAML 自然。
對(duì)比:properties 模擬列表(不直觀)
animals[0]=Dog animals[1]=Cat animals[2]=Bird
四、YAML 具備跨語(yǔ)言通用性
properties 是 Java 生態(tài)特有的配置格式,幾乎僅用于 JVM 項(xiàng)目。
而 YAML 是一種語(yǔ)言無(wú)關(guān)的數(shù)據(jù)格式,被廣泛應(yīng)用于 Python、JavaScript、Go、Ruby、PHP 等多種編程語(yǔ)言中。
這意味著:在多語(yǔ)言微服務(wù)架構(gòu)中,若使用統(tǒng)一的配置中心(如 Nacos、Apollo),各團(tuán)隊(duì)可共享同一份 YAML 配置文件,極大提升協(xié)作效率與運(yùn)維一致性。
總結(jié)
| 維度 | properties | YAML |
|---|---|---|
| 定位 | Java 屬性配置 | 通用數(shù)據(jù)序列化語(yǔ)言 |
| 語(yǔ)法 | key=value,扁平結(jié)構(gòu) | key: value,支持嵌套與縮進(jìn) |
| 數(shù)據(jù)類(lèi)型 | 僅基礎(chǔ)類(lèi)型 | 支持對(duì)象、列表、Map 等復(fù)雜結(jié)構(gòu) |
| 通用性 | 僅限 Java/Spring | 多語(yǔ)言通用 |
適用場(chǎng)景
| 場(chǎng)景 | 推薦格式 |
|---|---|
| 簡(jiǎn)單配置(< 10 個(gè)鍵) | .properties |
| 復(fù)雜層次配置(數(shù)據(jù)庫(kù)、多數(shù)據(jù)源、安全等) | .yml |
| 需要多文檔塊(單文件多 profile) | .yml |
| 團(tuán)隊(duì)中對(duì) YAML 不熟悉 | .properties |
| 需要編程生成配置文件(如腳本輸出) | .properties 更容易拼接 |
雖然 Spring Boot 同時(shí)支持兩種格式,但從可讀性、表達(dá)力和生態(tài)兼容性來(lái)看,YAML 顯然是更現(xiàn)代、更優(yōu)雅的選擇。如果你的新項(xiàng)目尚未選定配置格式,不妨大膽擁抱 YAML!
?? 小貼士:Spring Boot 會(huì)優(yōu)先加載
application.yml(如果存在),若兩者共存,YAML 配置將覆蓋 properties 中的同名項(xiàng)。
到此這篇關(guān)于Spring Boot中properties和YAML區(qū)別的文章就介紹到這了,更多相關(guān)SpringBoot中properties和YAML區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解springboot中yml、yaml、properties加載順序
- springboot加載外部配置文件實(shí)踐(properties、yml)
- SpringBoot項(xiàng)目屬性配置(application.properties、yml和yaml)
- SpringBoot配置文件中常用配置屬性詳解(application.properties/application.yml)
- SpringBoot配置文件之properties和yml的使用
- SpringBoot中properties,yml,yaml的區(qū)別及使用說(shuō)明
- springboot如何獲取yaml/yml(或properties)配置文件信息
- SpringBoot如何配置文件properties和yml
- Spring?Boot配置文件的語(yǔ)法規(guī)則詳解(properties和yml)
相關(guān)文章
Spring?Cache注解@Cacheable的九個(gè)屬性詳解
在@Cacheable注解的使用中,共有9個(gè)屬性供我們來(lái)使用,這9個(gè)屬性分別是:value、?cacheNames、?key、?keyGenerator、?cacheManager、?cacheResolver、?condition、?unless、?sync,下面介紹@Cacheable注解屬性使用方法,感興趣的朋友一起看看吧2025-05-05
關(guān)于mybatis一對(duì)一查詢(xún)一對(duì)多查詢(xún)遇到的問(wèn)題
這篇文章主要介紹了關(guān)于mybatis一對(duì)一查詢(xún),一對(duì)多查詢(xún)遇到的錯(cuò)誤,接下來(lái)是對(duì)文章進(jìn)行操作,要求查詢(xún)?nèi)课恼?,并關(guān)聯(lián)查詢(xún)作者,文章標(biāo)簽,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
詳解spring boot 使用application.properties 進(jìn)行外部配置
這篇文章主要介紹了詳解spring boot 使用application.properties 進(jìn)行外部配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
SpringBoot實(shí)現(xiàn)熱部署Community的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)熱部署Community的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Java中dubbo+zookeeper微服務(wù)架構(gòu)簡(jiǎn)介
Apache Dubbo是一款高性能的 Java RPC 框架,這篇文章主要介紹了Java中dubbo+zookeeper微服務(wù)架構(gòu),需要的朋友可以參考下2021-09-09
java虛擬機(jī)深入學(xué)習(xí)之內(nèi)存管理機(jī)制
java虛擬機(jī)在程序運(yùn)行時(shí)將內(nèi)存劃分為多個(gè)區(qū)域,每個(gè)區(qū)域作用,生命周期各不相同,下面這篇文章主要給大家介紹了關(guān)于java虛擬機(jī)深入學(xué)習(xí)之內(nèi)存管理機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11
jvm字符串常量池在什么內(nèi)存區(qū)域問(wèn)題解析
這篇文章主要介紹了jvm字符串常量池在什么內(nèi)存區(qū)域的問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

