SpringBoot項(xiàng)目屬性配置(application.properties、yml和yaml)
簡(jiǎn)介
SpringBoot支持多種配置文件格式,包括application.properties、yml和yaml等。本文章將詳細(xì)介紹這三種配置文件的內(nèi)容格式和詳細(xì)用法,以及在程序中如何對(duì)配置文件中的屬性進(jìn)行讀取。文章內(nèi)容若存在錯(cuò)誤或需改進(jìn)的地方,歡迎大家指正!若對(duì)操作有任何疑問歡迎留言!非常感謝!
一、SpringBoot默認(rèn)配置文件
1、application.properties文件
該文件位于resources目錄下,是隨工程的創(chuàng)建而生成的一個(gè)空白文件(若沒有可手動(dòng)創(chuàng)建,必須保證名稱和類型為application.properties),在這個(gè)文件中可以進(jìn)行項(xiàng)目的配置。
2、文件內(nèi)容要求:
- 鍵值對(duì)結(jié)構(gòu),格式為key=value
- 注釋以#或者!開頭
- 列表或者數(shù)組的值使用逗號(hào)隔開
- 使用點(diǎn)號(hào)
.
表示屬性層級(jí) - 想看系統(tǒng)支持哪些配置可以在Spring官方查看,鏈接:Common Application Properties
以配置啟動(dòng)端口為例,SpringBoot項(xiàng)目默認(rèn)的啟動(dòng)端口為8080,現(xiàn)在將這個(gè)端口配置為8888。如下,只需要在application.properties文件中配置server.port=8888即可。
二、yml或者yaml配置文件
1、簡(jiǎn)介
yml文件和yaml文件本質(zhì)上是同一種文件格式,沒有實(shí)質(zhì)性的技術(shù)區(qū)別。.yaml是官方推薦的標(biāo)準(zhǔn)擴(kuò)展名,.yml是因?yàn)樵缙赪indows限制3字符擴(kuò)展名而流行。無(wú)論使用哪個(gè)擴(kuò)展名,文件內(nèi)容都遵循相同的 YAML 規(guī)范。所以下面在介紹文件時(shí),也不再區(qū)分二者。
因?yàn)閥aml文件內(nèi)容的層次感更強(qiáng),內(nèi)容更加清爽,一目了然。所以,在實(shí)際項(xiàng)目中大部分情況下是使用.yaml或者.yml作為配置文件,application.properties文件使用的頻率就較低些。一般情況下,三者不會(huì)共存。
2、語(yǔ)法規(guī)則
- 大小寫敏感
- 屬性層級(jí)關(guān)系使用多行描述,每行結(jié)尾使用冒號(hào)結(jié)束
- 使用縮進(jìn)表示層級(jí)關(guān)系,同層級(jí)左側(cè)對(duì)齊,只允許使用空格(不允許使用Tab鍵)
- 屬性值前面添加空格(屬性名與屬性值之前使用冒號(hào)+空格作為分割)
- # 表示注釋
- ${一級(jí)屬性名.二級(jí)屬性名... ...}表示屬性引用
- 使用引號(hào)包裹帶有轉(zhuǎn)義字符的字符串才可以生效
# 普通使用 name: demo # 層級(jí)關(guān)系 user: name: zhangsan age: 18 # 數(shù)組/列表格式 list: - zhangsan - lisi - wangwu # 數(shù)組/列表縮略格式 list2: [zhangsan, lisi, wangwu] # 對(duì)象列表 users: - name: zhangsan age: 18 - name: lisi age: 19 - name: wangwu age: 20 # 對(duì)象列表縮略格式 users2: [{name:zhangsan, age:18},{name:lisi, age:19},{name:wangwu, age:20}] # ---------- 部分補(bǔ)充 ---------- # TRUE,true,True,FALSE,false,False boolean: TRUE # 6.23542343e+5 支持科學(xué)計(jì)數(shù)法 float: 3.14 # 0b1010_0111_0100_1010_1110 支持二進(jìn)制、八進(jìn)制、十六進(jìn)制 int: 123 # 使用 ~ 表示null null: ~ # 字符串可以直接書寫 string: HelloWorld # 可以使用雙引號(hào)包裹特殊字符 string2: "Hello\nWorld" # 屬性引用 baseUrl: "127.0.0.1" tmp: ${baseUrl}:${server.port}}
3、配置文件加載優(yōu)先級(jí)
當(dāng)application.properties文件、yaml文件、yml文件三者共存時(shí),文件中相同配置的加載優(yōu)先級(jí)如下:
application.properties > yml > yaml
而三個(gè)文件中不同的配置就不存在加載優(yōu)先級(jí)的問題,而是全部保留,也就是說三個(gè)文件的不同的屬性都會(huì)被讀到。
三、SpringBoot程序中讀取配置文件屬性的幾種方式
1、使用@Value注解讀取
程序中定義的屬性名與配置文件中的屬性名并沒有強(qiáng)關(guān)聯(lián),也就是定義的時(shí)候無(wú)需強(qiáng)制保持一致。
使用@Value注解讀取單個(gè)數(shù)據(jù),屬性名引用方式:${一級(jí)屬性名.二級(jí)屬性名... ...},只需要在大括號(hào)中加一個(gè)冒號(hào)然后寫值就可以設(shè)置默認(rèn)值:${一級(jí)屬性名.二級(jí)屬性名... ...:默認(rèn)值}。
2、使用Environment類對(duì)象獲取屬性
使用@Autowired在類中注入Environment對(duì)象,然后使用getProperty方法接收配置文件中的屬性名來(lái)獲取屬性值,可以進(jìn)行非空判斷來(lái)設(shè)置默認(rèn)值。
3、自定義對(duì)象映射配置文件屬性
(1)創(chuàng)建定義對(duì)象
注意:這里可能與聽到的知識(shí)不太一樣,可自行測(cè)試
配置項(xiàng)中的名稱需要與實(shí)體類的set方法后的名稱保持強(qiáng)一致。配置項(xiàng)名稱時(shí)可以不與實(shí)體類中的屬性名保持一致,因?yàn)橐话闱闆r下set/get方法后面的名稱是和屬性名一致的,比如自動(dòng)生成或者使用lombok生成的方法,都是一致的,所以也會(huì)有配置項(xiàng)名必須屬性名保持一致的說法。如果有特殊情況,那么只需要保證配置項(xiàng)中的名稱需要與實(shí)體類的set方法后的名稱強(qiáng)一致即可,與get方法、實(shí)體類名、實(shí)體屬性名、set方法形參無(wú)關(guān)。
(2)將類交給Spring的IOC容器
這個(gè)地方有兩種方式,注意只能使用其中一種,不可同時(shí)使用!
第一種方式:在自定義類上增加@Component注解,讓當(dāng)前的類直接注冊(cè)成IOC的Bean。
第二種方式:在啟動(dòng)類上聲明@EnableConfigurationProperties注解,并在指定屬性值,這里的屬性值如果只有一個(gè)類可以直接寫,若是多個(gè)類可以使用數(shù)組形式。這種方式會(huì)自動(dòng)將數(shù)組里面的類注冊(cè)為Bean,好處在于在這里可以直觀的觀察到有哪些讀取配置類。
(3)指定當(dāng)前類加載的數(shù)據(jù)
在自定義類上面增加@ConfigurationProperties(prefix = "student")注解,并使用prefix屬性指定配置文件中屬性前綴。綁定前綴命名規(guī)范:僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符。
(4)示例
通過上面三部就已經(jīng)完成了配置文件中的屬性對(duì)自定義類屬性的映射,下面是一個(gè)使用示例:
到此這篇關(guān)于SpringBoot項(xiàng)目屬性配置(application.properties、yml和yaml)的文章就介紹到這了,更多相關(guān)SpringBoot 屬性配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot@EnableXXXX注解編程模型講解
這篇文章主要介紹了spring boot@EnableXXXX注解編程模型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09springboot配置請(qǐng)求超時(shí)時(shí)間(Http會(huì)話和接口訪問)
本文主要介紹了springboot配置請(qǐng)求超時(shí)時(shí)間,包含Http會(huì)話和接口訪問兩種,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Spring中ClassPathXmlApplicationContext類的使用詳解
這篇文章主要介紹了Spring中ClassPathXmlApplicationContext類的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java如何跳出當(dāng)前多重循環(huán)你知道嗎
這篇文章主要為大家介紹了Java跳出當(dāng)前多重循環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換?
這篇文章主要介紹了基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換,文章舉例說明圍繞文章主題展開相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-02-02Spring AI 實(shí)現(xiàn) STDIO和SSE MCP Server的過
STDIO方式是基于進(jìn)程間通信,MCP Client和MCP Server運(yùn)行在同一主機(jī),主要用于本地集成、命令行工具等場(chǎng)景,這篇文章主要介紹了Spring AI 實(shí)現(xiàn) STDIO和SSE MCP Server,需要的朋友可以參考下2025-05-05