關(guān)于配置文件的詳細(xì)說(shuō)明可以看官方文檔:
24.?Externalized Configuration
以下是個(gè)人學(xué)習(xí)過(guò)程中的筆記,如有錯(cuò)誤,請(qǐng)多指教!
目錄
(一)配置文件
(二)yaml的概述及基本使用
????????yaml基本語(yǔ)法
(三)注入配置文件的三種方式
(四)yaml配置文件位置
(五)多環(huán)境切換配置文件
(一)配置文件
Springboot中可以使用兩種形式的配置文件:.properties文件和 .yml文件
application.properties
????????語(yǔ)法結(jié)構(gòu) :key=valueapplication.yml
? ? ? ? 語(yǔ)法結(jié)構(gòu): key: value
(二)yaml的概述及基本使用
YAML是 "YAML Ain't a Markup Language" (YAML不是一種標(biāo)記語(yǔ)言)的遞歸縮寫。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:"Yet Another Markup Language"(仍是一種標(biāo)記語(yǔ)言)
????????????????????????????????yaml語(yǔ)言以數(shù)據(jù)作為中心,而不是以標(biāo)記語(yǔ)言為重點(diǎn)!
傳統(tǒng)xml配置:
<server>
<port>8081<port>
</server>
yaml配置:
server:
port: 8080
????????yaml基本語(yǔ)法:
????????1. 冒號(hào)后面必須加一個(gè)空格!
????????2. yaml通過(guò)縮進(jìn)區(qū)分層級(jí)關(guān)系,相同縮進(jìn)的為同一層級(jí)。
????????3.?屬性和值的大小寫都是十分敏感的。
對(duì)象、Map(鍵值對(duì))
# 配置對(duì)象屬性
person:
name: 小明
age: 8
# 配置鍵值對(duì)
maps: {k1: v1, k2: v2}
數(shù)組(List、set)
用 - 值表示數(shù)組中的一個(gè)元素,比如:
pets:
- cat
- dog
- parrot
# 行內(nèi)寫法
pets: [cat, dog, parrot]
(三)注入配置文件的三種方式
方式一:通過(guò)yaml配置文件注入匹配值
需要文件有:一個(gè)實(shí)體類Dog(name和age屬性),application.yml, 一個(gè)測(cè)試類,還需在pom.xml中另外新添一個(gè)依賴。
①實(shí)體類Dog
package com.example.pojo;
@Component //注冊(cè)bean到容器中
@ConfigurationProperties(prefix = "dog") // 加載application.yaml中的配置,前綴為dog
public class Dog{
private String name;
private Integer age;
//有參無(wú)參構(gòu)造方法、get和set方法、toString()方法
}
②application.yml
dog:
name: 旺財(cái)
age: 3
③測(cè)試類
@SpringBootTest
class DemoApplicationTests {
@Autowired //將狗狗自動(dòng)注入進(jìn)來(lái)
private Dog dog;
@Test
public void contextLoads() {
System.out.println(dog); //打印看下狗狗對(duì)象
}
}
這里還需要在pom.xml中添加一個(gè)依賴,很關(guān)鍵!不加的話會(huì)爆紅。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
運(yùn)行結(jié)果:
方式二(還沒(méi)學(xué)到y(tǒng)aml時(shí)是如何給bean注入屬性值的):通過(guò)@Value進(jìn)行注入
這里只需要一個(gè)實(shí)體類即可,
@Component // 注冊(cè)bean
public class Dog{
@Value("旺財(cái)")
private String name;
@Value("3")
private Integer age;
}
方式三:指定加載自定義的properties文件為對(duì)象屬性賦值
要有兩個(gè)文件:whatever.properties(放在resources文件夾下)和一個(gè)實(shí)體類Dog;
(ps.這里的配置文件我取名為whatever,表示配置文件的名字是什么都可以,不一定非得是application.properties)
①whatever.properties配置文件
name=旺財(cái)
age=3
②實(shí)體類Dog
@Component //注入到容器中
@PropertySource(value = "classpath:whatever.properties")
// 加載指定路徑的配置文件,這里的whatever.properties文件放在resources文件夾下
public class Dog{
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
}
三種方式看下來(lái),@Value是最麻煩的了。
@Value和@ConfigurationProperties對(duì)比如下:
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的屬性 | 一個(gè)個(gè)指定 |
松散綁定(松散語(yǔ)法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303數(shù)據(jù)校驗(yàn) | 支持 | 不支持 |
復(fù)雜類型封裝 | 支持 | 不支持 |
1、@ConfigurationProperties只需要些一次就好,@Value則需要每個(gè)字段都添加。
2、松散綁定:比方說(shuō)yml文件中寫的last-name,實(shí)體類的屬性是lastName也能匹配得上,- 后面跟著的字母默認(rèn)是大寫的。具體可以測(cè)試下。
3、 JSR303數(shù)據(jù)校驗(yàn),就是可以在字段是增加一層過(guò)濾器驗(yàn)證 , 可以保證數(shù)據(jù)的合法性。(比如@Null 驗(yàn)證對(duì)象是否為null ,@Email 驗(yàn)證是否是郵件地址,如果為null,不進(jìn)行驗(yàn)證,算通過(guò)驗(yàn)證。)
4、復(fù)雜類型封裝,yml中可以封裝對(duì)象,@Value就不支持。
結(jié)論:
配置yml和配置properties都可以獲取到值 , 推薦使用 yml;
如果在某個(gè)業(yè)務(wù)中,只需要獲取配置文件中的某個(gè)值,可以使用一下 @Value;
如果說(shuō),我們專門編寫了一個(gè)JavaBean來(lái)和配置文件進(jìn)行一一映射,就直接@configurationProperties,不要猶豫!
(四)yaml配置文件位置
可以放在4種地方:
序號(hào) | 位置 | 說(shuō)明 | 優(yōu)先級(jí) |
① | ./config/ | 工程文件中的config文件夾下 | 第一優(yōu)先被配置 |
② | ./ | 直接在工程文件根目錄下 | 第二優(yōu)先被配置 |
③ | classpath:/config/ | 資源文件夾中的config文件夾下 | 第三優(yōu)先被配置 |
④ | classpath:/ | 直接在資源文件下 | 第四優(yōu)先被配置 |
項(xiàng)目中具體位置可參考下圖:
(五)多環(huán)境切換配置文件
我們?cè)谥髋渲梦募帉懙臅r(shí)候,文件名可以是 application-{profile}.properties/yml ,
用來(lái)指定多個(gè)環(huán)境版本;
例如:
application-test.properties 代表測(cè)試環(huán)境配置
application-dev.properties 代表開(kāi)發(fā)環(huán)境配置
但是Springboot并不會(huì)直接啟動(dòng)這些配置文件,它默認(rèn)使用application.properties主配置文件;
(1)使用proerties文件進(jìn)行配置:
下圖可見(jiàn)我們有三個(gè)配置文件:
?切換環(huán)境時(shí),在application.properties中說(shuō)明。
(1)使用yaml文件進(jìn)行配置:
?僅在一個(gè)文件中配置即可,---表示分割線文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-455520.html
注意:如果yml和properties同時(shí)都配置了端口,并且沒(méi)有激活其他環(huán)境 , 默認(rèn)會(huì)使用properties配置文件的!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455520.html
到了這里,關(guān)于【Springboot】yaml配置文件&多環(huán)境切換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!