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

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

二、yml或者yaml配置文件
1、簡介
yml文件和yaml文件本質(zhì)上是同一種文件格式,沒有實質(zhì)性的技術(shù)區(qū)別。.yaml是官方推薦的標準擴展名,.yml是因為早期Windows限制3字符擴展名而流行。無論使用哪個擴展名,文件內(nèi)容都遵循相同的 YAML 規(guī)范。所以下面在介紹文件時,也不再區(qū)分二者。
因為yaml文件內(nèi)容的層次感更強,內(nèi)容更加清爽,一目了然。所以,在實際項目中大部分情況下是使用.yaml或者.yml作為配置文件,application.properties文件使用的頻率就較低些。一般情況下,三者不會共存。
2、語法規(guī)則
- 大小寫敏感
- 屬性層級關(guān)系使用多行描述,每行結(jié)尾使用冒號結(jié)束
- 使用縮進表示層級關(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 支持科學計數(shù)法
float: 3.14
# 0b1010_0111_0100_1010_1110 支持二進制、八進制、十六進制
int: 123
# 使用 ~ 表示null
null: ~
# 字符串可以直接書寫
string: HelloWorld
# 可以使用雙引號包裹特殊字符
string2: "Hello\nWorld"
# 屬性引用
baseUrl: "127.0.0.1"
tmp: ${baseUrl}:${server.port}}3、配置文件加載優(yōu)先級
當application.properties文件、yaml文件、yml文件三者共存時,文件中相同配置的加載優(yōu)先級如下:
application.properties > yml > yaml
而三個文件中不同的配置就不存在加載優(yōu)先級的問題,而是全部保留,也就是說三個文件的不同的屬性都會被讀到。
三、SpringBoot程序中讀取配置文件屬性的幾種方式
1、使用@Value注解讀取
程序中定義的屬性名與配置文件中的屬性名并沒有強關(guān)聯(lián),也就是定義的時候無需強制保持一致。
使用@Value注解讀取單個數(shù)據(jù),屬性名引用方式:${一級屬性名.二級屬性名... ...},只需要在大括號中加一個冒號然后寫值就可以設(shè)置默認值:${一級屬性名.二級屬性名... ...:默認值}。


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


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

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

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

(3)指定當前類加載的數(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)文章
Maven繼承父工程時的relativePath標簽解析用法小結(jié)
relativePath 的作用是為了找到父級工程的pom.xml,本文主要介紹了Maven繼承父工程時的relativePath標簽解析用法小結(jié),具有一定的參考價值,感興趣的可以了解一下2024-03-03
Springboot居然可以設(shè)置動態(tài)的Banner(推薦)
這篇文章主要介紹了Springboot居然可以設(shè)置動態(tài)的Banner,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
springboot 返回json格式數(shù)據(jù)時間格式配置方式
這篇文章主要介紹了springboot 返回json格式數(shù)據(jù)時間格式配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
搭建MyBatis-Plus框架并進行數(shù)據(jù)庫增刪改查功能
這篇文章主要介紹了搭建MyBatis-Plus框架并進行數(shù)據(jù)庫增刪改查,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
mybatis-spring:@MapperScan注解的使用
這篇文章主要介紹了mybatis-spring:@MapperScan注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Spring Boot使用Thymeleaf + Gradle構(gòu)建war到Tomcat
今天小編就為大家分享一篇關(guān)于Spring Boot使用Thymeleaf + Gradle構(gòu)建war到Tomcat,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java FileInputStream讀中文亂碼問題解決方案
這篇文章主要介紹了Java FileInputStream讀中文亂碼問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10

