SpringBoot項目屬性配置(application.properties、yml和yaml)
簡介
SpringBoot支持多種配置文件格式,包括application.properties、yml和yaml等。本文章將詳細(xì)介紹這三種配置文件的內(nèi)容格式和詳細(xì)用法,以及在程序中如何對配置文件中的屬性進(jìn)行讀取。文章內(nèi)容若存在錯誤或需改進(jìn)的地方,歡迎大家指正!若對操作有任何疑問歡迎留言!非常感謝!
一、SpringBoot默認(rèn)配置文件
1、application.properties文件
該文件位于resources目錄下,是隨工程的創(chuàng)建而生成的一個空白文件(若沒有可手動創(chuàng)建,必須保證名稱和類型為application.properties),在這個文件中可以進(jìn)行項目的配置。

2、文件內(nèi)容要求:
- 鍵值對結(jié)構(gòu),格式為key=value
- 注釋以#或者!開頭
- 列表或者數(shù)組的值使用逗號隔開
- 使用點號
.表示屬性層級 - 想看系統(tǒng)支持哪些配置可以在Spring官方查看,鏈接:Common Application Properties
以配置啟動端口為例,SpringBoot項目默認(rèn)的啟動端口為8080,現(xiàn)在將這個端口配置為8888。如下,只需要在application.properties文件中配置server.port=8888即可。

二、yml或者yaml配置文件
1、簡介
yml文件和yaml文件本質(zhì)上是同一種文件格式,沒有實質(zhì)性的技術(shù)區(qū)別。.yaml是官方推薦的標(biāo)準(zhǔn)擴展名,.yml是因為早期Windows限制3字符擴展名而流行。無論使用哪個擴展名,文件內(nèi)容都遵循相同的 YAML 規(guī)范。所以下面在介紹文件時,也不再區(qū)分二者。
因為yaml文件內(nèi)容的層次感更強,內(nèi)容更加清爽,一目了然。所以,在實際項目中大部分情況下是使用.yaml或者.yml作為配置文件,application.properties文件使用的頻率就較低些。一般情況下,三者不會共存。
2、語法規(guī)則
- 大小寫敏感
- 屬性層級關(guān)系使用多行描述,每行結(jié)尾使用冒號結(jié)束
- 使用縮進(jìn)表示層級關(guān)系,同層級左側(cè)對齊,只允許使用空格(不允許使用Tab鍵)
- 屬性值前面添加空格(屬性名與屬性值之前使用冒號+空格作為分割)
- # 表示注釋
- ${一級屬性名.二級屬性名... ...}表示屬性引用
- 使用引號包裹帶有轉(zhuǎn)義字符的字符串才可以生效
# 普通使用
name: demo
# 層級關(guān)系
user:
name: zhangsan
age: 18
# 數(shù)組/列表格式
list:
- zhangsan
- lisi
- wangwu
# 數(shù)組/列表縮略格式
list2: [zhangsan, lisi, wangwu]
# 對象列表
users:
- name: zhangsan
age: 18
- name: lisi
age: 19
- name: wangwu
age: 20
# 對象列表縮略格式
users2: [{name:zhangsan, age:18},{name:lisi, age:19},{name:wangwu, age:20}]
# ---------- 部分補充 ----------
# TRUE,true,True,FALSE,false,False
boolean: TRUE
# 6.23542343e+5 支持科學(xué)計數(shù)法
float: 3.14
# 0b1010_0111_0100_1010_1110 支持二進(jìn)制、八進(jìn)制、十六進(jìn)制
int: 123
# 使用 ~ 表示null
null: ~
# 字符串可以直接書寫
string: HelloWorld
# 可以使用雙引號包裹特殊字符
string2: "Hello\nWorld"
# 屬性引用
baseUrl: "127.0.0.1"
tmp: ${baseUrl}:${server.port}}3、配置文件加載優(yōu)先級
當(dāng)application.properties文件、yaml文件、yml文件三者共存時,文件中相同配置的加載優(yōu)先級如下:
application.properties > yml > yaml
而三個文件中不同的配置就不存在加載優(yōu)先級的問題,而是全部保留,也就是說三個文件的不同的屬性都會被讀到。
三、SpringBoot程序中讀取配置文件屬性的幾種方式
1、使用@Value注解讀取
程序中定義的屬性名與配置文件中的屬性名并沒有強關(guān)聯(lián),也就是定義的時候無需強制保持一致。
使用@Value注解讀取單個數(shù)據(jù),屬性名引用方式:${一級屬性名.二級屬性名... ...},只需要在大括號中加一個冒號然后寫值就可以設(shè)置默認(rèn)值:${一級屬性名.二級屬性名... ...:默認(rèn)值}。


2、使用Environment類對象獲取屬性
使用@Autowired在類中注入Environment對象,然后使用getProperty方法接收配置文件中的屬性名來獲取屬性值,可以進(jìn)行非空判斷來設(shè)置默認(rèn)值。


3、自定義對象映射配置文件屬性
(1)創(chuàng)建定義對象
注意:這里可能與聽到的知識不太一樣,可自行測試
配置項中的名稱需要與實體類的set方法后的名稱保持強一致。配置項名稱時可以不與實體類中的屬性名保持一致,因為一般情況下set/get方法后面的名稱是和屬性名一致的,比如自動生成或者使用lombok生成的方法,都是一致的,所以也會有配置項名必須屬性名保持一致的說法。如果有特殊情況,那么只需要保證配置項中的名稱需要與實體類的set方法后的名稱強一致即可,與get方法、實體類名、實體屬性名、set方法形參無關(guān)。

(2)將類交給Spring的IOC容器
這個地方有兩種方式,注意只能使用其中一種,不可同時使用!
第一種方式:在自定義類上增加@Component注解,讓當(dāng)前的類直接注冊成IOC的Bean。

第二種方式:在啟動類上聲明@EnableConfigurationProperties注解,并在指定屬性值,這里的屬性值如果只有一個類可以直接寫,若是多個類可以使用數(shù)組形式。這種方式會自動將數(shù)組里面的類注冊為Bean,好處在于在這里可以直觀的觀察到有哪些讀取配置類。

(3)指定當(dāng)前類加載的數(shù)據(jù)
在自定義類上面增加@ConfigurationProperties(prefix = "student")注解,并使用prefix屬性指定配置文件中屬性前綴。綁定前綴命名規(guī)范:僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符。

(4)示例
通過上面三部就已經(jīng)完成了配置文件中的屬性對自定義類屬性的映射,下面是一個使用示例:

到此這篇關(guān)于SpringBoot項目屬性配置(application.properties、yml和yaml)的文章就介紹到這了,更多相關(guān)SpringBoot 屬性配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis中的mapper.xml使用循環(huán)語句
這篇文章主要介紹了mybatis中的mapper.xml使用循環(huán)語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
使用?Spring?AI?+?Ollama?構(gòu)建生成式?AI?應(yīng)用的方法
通過集成SpringBoot和Ollama,本文詳細(xì)介紹了如何構(gòu)建生成式AI應(yīng)用,首先,介紹了AI大模型服務(wù)的兩種實現(xiàn)方式,選擇使用ollama進(jìn)行部署,隨后,通過SpringBoot+SpringAI來實現(xiàn)應(yīng)用構(gòu)建,本文為開發(fā)者提供了一個實用的指南,幫助他們快速入門生成式AI應(yīng)用的開發(fā)2024-11-11
SpringBoot中的@ConfigurationProperties注解解析
這篇文章主要介紹了SpringBoot中的@ConfigurationProperties注解解析,Spring源碼中大量使用了ConfigurationProperties注解,通過與其他注解配合使用,能夠?qū)崿F(xiàn)Bean的按需配置,該注解可以放在類上,也可以放在方法上,需要的朋友可以參考下2023-11-11
Spring如何替換掉默認(rèn)common-logging.jar
這篇文章主要介紹了Spring如何替換掉默認(rèn)common-logging.jar,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05

