SpringBoot系列之YAML配置用法學習筆記
1、全域性配置
SpringBoot的全域性配置檔案有兩種:
- application.properties
- application.yml
配置檔案的作用:修改SpringBoot自動配置的預設值,主要是預設值,因為SpringBoot啟動時會自動載入很多預設配置,詳細的可以參考我之前部落格原始碼學習系列之SpringBoot自動配置
2、YAML語言定義
YAML表示YAML Ain’t Markup Language,在百度百科的解釋是:
YAML是"YAML Ain’t a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML 的意思其實是:“Yet Another Markup Language”(仍是一種標記語言),但為了強調這種語言以資料做為中心,而不是以標記語言為重點,而用反向縮略語重新命名。
所以,我們不用在意它是否是一種標記語言,我們只要記得它是一種以資料為中心的語言就可以,語法非常簡潔,使用空白,縮排,分行組織資料,從而使得表示更加簡潔易讀。
3、YAML基本語法
引用部落格http://www.ruanyifeng.com/blog/2016/07/yaml.html
- 大小寫敏感
- 使用縮排表示層級關係
- 縮排時不允許使用Tab鍵,只允許使用空格。
- 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
所以YAML基本語法其實就是key:(空格)value的形式,其中空格必須要有,以空格的縮排來控制層級關係,只要對齊的一列資料都是同一個層級的,比如:
server:
port: 8081
path: /example
注意:屬性key和值都是大小寫敏感的
4、YAML支援的資料結構
-
字面量:普通的值(整數、浮點數、字串、布林、Null值、時間、日期)
key: value(字面值直接寫上就可以)
字串也預設不需要加上單引號和雙引號的
單引號:會轉義特殊字元,將特殊字元轉為一個普通的字串
name: ‘xiaowang \n’ 列印 xiaowang \n (ps:這裡的\n被轉成字串)
雙引號:不會轉義特殊字元,特殊字元還是表達其本身想表示的意思
name: ‘xiaowang \n’ 列印 xiaowang 換行 (ps:這裡的\n執行換行操作) -
物件:也可以說是map,也就是鍵值對的形式
key: value(以物件屬性key:value的形式表示,在物件名下一行寫屬性:屬性值,,同樣注意空格縮排)
example:
user:
username: root
password: rootpwd
也可以用行內寫法表示:
user:{username: root,password: rootpwd}
- 陣列:也可以說是list或者序列的方式表示
用"-"符合+值的方式陣列中一個元素
pets:
- cat
- dog
顯然也有行內寫法,用[]中括號表示
pets: [cat,dog]
5、例子實踐
ok,上面的都是一些必要的理論,下面開始實踐,yaml使用的時候,經常是組合寫法的,也就是物件、字面值等等一起組合使用的,本文結合Springboot,介紹一下這種用法,在Springboot中,yaml語言被用於配置屬性,這種寫法很簡潔,值得推廣
在Springboot的application.yml檔案加上如下配置:
## 測試ConfigurationProperties
user:
userName: root
isAdmin: true
regTime: 2019/11/01
isOnline: 1
maps: {k1 : v1,k2: v2}
lists:
- list1
- list2
address:
tel: 15899988899
name: 上海市
編寫測試bean類進行對映
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* <pre>
* 將配置檔案中每個屬性都對映到這個元件,注意:記得加@Component註解,這樣才能將這個元件 * 載入到Spring容器中
* </pre>
*/
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String userName;
private boolean isAdmin;
private Date regTime;
private Long isOnline;
private Map<String,Object> maps;
private List<Object> lists;
private Address address;
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", isAdmin=" + isAdmin +
", regTime=" + regTime +
", isOnline=" + isOnline +
", maps=" + maps +
", lists=" + lists +
", address=" + address +
'}';
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean admin) {
isAdmin = admin;
}
public Date getRegTime() {
return regTime;
}
public void setRegTime(Date regTime) {
this.regTime = regTime;
}
public Long getIsOnline() {
return isOnline;
}
public void setIsOnline(Long isOnline) {
this.isOnline = isOnline;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Address類:
public class Address {
private String tel;
private String name;
@Override
public String toString() {
return "Address{" +
"tel='" + tel + '\'' +
", name='" + name + '\'' +
'}';
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
寫個junit測試類來單元測試:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.muses.jeeplatform.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@org.springframework.boot.test.context.SpringBootTest
public class SpringBootTest {
@Autowired
User user;
@Test
public void testConfigurationProperties(){
System.out.println(user);
}
}
User{userName='root', isAdmin=false, regTime=Fri Nov 01 00:00:00 CST 2019, isOnline=1, maps={k1=v1, k2=v2}, lists=[list1, list2], address=Address{tel='15899988899', name='上海市'}}
測試通過後,idea會提示,
https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/html/configuration-metadata.html#configuration-metadata-annotation-processor
然後,我們加上pom配置就可以
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
相關文章
- Swoft 學習筆記之配置筆記
- JS學習筆記之call、apply的用法JS筆記APP
- SpringBoot 學習筆記Spring Boot筆記
- SpringBoot學習筆記Spring Boot筆記
- springboot 學習筆記(四)Spring Boot筆記
- 【SpringBoot】YAML 配置檔案Spring BootYAML
- 補習系列(10)-springboot 之配置讀取Spring Boot
- SpringBoot運維學習筆記Spring Boot運維筆記
- jQuery 學習系列筆記jQuery筆記
- springboot 開發學習筆記1Spring Boot筆記
- tensorflow學習筆記--embedding_lookup()用法筆記
- Java學習筆記系列-反射Java筆記反射
- Elasticsearch的配置學習筆記Elasticsearch筆記
- Angular 依賴注入學習筆記之工廠函式的用法Angular依賴注入筆記函式
- SpringBoot學習筆記(十五:OAuth2 )Spring Boot筆記OAuth
- SpringBoot學習筆記(十七:非同步呼叫)Spring Boot筆記非同步
- SpringBoot學習筆記(十七:MyBatis-Plus )Spring Boot筆記MyBatis
- Python學習筆記-yield用法及優點Python筆記
- 架構學習筆記系列三架構筆記
- 架構學習筆記系列二架構筆記
- 架構學習筆記系列一架構筆記
- yaml學習YAML
- webpack學習筆記七:配置babelWeb筆記Babel
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- 學習筆記之測試筆記
- JS學習筆記之this指向JS筆記
- flask學習筆記之blueprintFlask筆記
- 學習筆記:DOM之appendChild筆記APP
- node學習筆記之39筆記
- Web之http學習筆記WebHTTP筆記
- Netty學習筆記之ChannelHandlerNetty筆記
- Pytorch學習筆記之tensorboardPyTorch筆記ORB
- Boltdb學習筆記之〇--概述筆記
- 2020-11-14springboot學習筆記03Spring Boot筆記
- SpringBoot整合ElasticSearch 入門demo學習筆記Spring BootElasticsearch筆記
- vue 3 學習筆記 (六)——watch 、watchEffect 新用法Vue筆記
- Pytest學習筆記5-conftest.py的用法筆記
- 前端學習筆記 - var、let和const的用法前端筆記