全站資源開放下載,感謝廣大網友的支持
鏈接失效請移步職業司平臺
非盈利平臺

非盈利平臺

只為分享一些優質內容

Java幫幫-微信公眾號

Java幫幫-微信公眾號

將分享做到極致

微信小程序

微信小程序

更方便的閱讀

職業司微信公眾號

職業司微信公眾號

實時動態通知

安卓APP

安卓APP

我們從此不分開

程序員生活志-公眾號

程序員生活志-公眾號

程序員生活學習圈,互聯網八卦黑料

支付寶贊助-Java幫幫社區
微信贊助-Java幫幫社區

SpringBoot配置文件詳解[云圖智聯]

1
發表時間:2020-07-02 11:52

免費學習視頻歡迎關注云圖智聯:

配置文件詳解
SpringBoot的全局配置文件有兩種:

application.properties
application.yml
配置文件的作用:修改SpringBoot自動配置的默認值.

properties配置文件我們之前都有接觸,今天就讓我們來認識一下yaml配置文件吧。


YAML表示YAML Ain’t Markup Language,在百度百科的解釋是:

YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),但為了強調這種語言以數據做為中心,而不是以標記語言為重點,而用反向縮略語重命名。
所以,我們不用在意它是否是一種標記語言,我們只要記得它是一種以數據為中心的語言就可以,語法非常簡潔,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。

YAML基本語法
大小寫敏感
使用縮進表示層級關系
縮進時不允許使用Tab鍵,只允許使用空格。
縮進的空格數目不重要,只要相同層級的元素左側對齊即可
所以YAML基本語法其實就是key:(空格)value的形式,其中空格必須要有,以空格的縮進來控制層級關系,只要對齊的一列數據都是同一個層級的,比如:


server:

port: 8081

path: /example
YAML支持的數據結構
字面量(也有“純量”一叫法)
語法:

字面量:普通的值(整數、浮點數、字符串、布爾、Null值、時間、日期)

key: value(字面值直接寫上就可以)
字符串也默認不需要加上單引號和雙引號的(也可以加上引號)
單引號:會轉義特殊字符,將特殊字符轉為一個普通的字符串
name: 'xiaowang \n' 打印 xiaowang \n (ps:這里的\n被轉成字符串)
雙引號:不會轉義特殊字符,特殊字符還是表達其本身想表示的意思
name: 'xiaowang \n' 打印 xiaowang 換行 (ps:這里的\n執行換行操作)
示例:


name: 張三

boolean: TRUE   #true,True都可以

float:

- 3.14

- 6.8523015e+5   #可以使用科學計數法

int:

- 123

- 0b1010\_0111\_0100\_1010\_1110    #二進制表示

null:

nodeName: 'node'

parent: ~   #使用~表示null

string:

- 哈哈

- 'Hello world'   #可以使用雙引號或者單引號包裹特殊字符

- newline

newline2    #字符串可以拆成多行,每一行會被轉化成一個空格

date:

- 2018-02-17    #日期必須使用ISO 8601格式,即yyyy-MM-dd
**注意**:在springboot中yaml文件的時間格式 date: yyyy/MM/dd HH:mm:ss
對象
對象:也可以說是map,也就是鍵值對的形式
key: value形式(對象屬性key: value的形式表示,在對象名下一行寫屬性: 屬性值)
同一個對象的各個屬性前對齊就可以(默認是兩個空格)
示例:

user:

username: root

password: rootpwd
另外對象也可以寫成行內形式
例如:

user:{username: root,password: rootpwd}
數組
數組:也可以說是list或者序列的方式表示 用"-"空格 值的方式表示數組中一個元素

示例:

pets:

- cat

- dog
同樣數組也有對應的行內寫法,如:

pets: \[cat,dog\]
注意:在實際應用中經常是多種類型相互配合、相互嵌套配合使用,下面我們就來上一個實例

注釋
“#” 被注釋內容

文本塊
|:使用|標注的文本內容縮進表示的塊,可以保留塊中已有的回車換行

value: |

hello

world!
# 輸出結果:hello 換行 world!

+表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。

value: |

hello

value: |\-

hello

value: |+

hello

\# 輸出:hello\\n hello hello\\n\\n(有多少個回車就有多少個\\n)
注意 “|” 與 文本之間須另起一行

>:使用 > 標注的文本內容縮進表示的塊,將塊中回車替換為空格,最終連接成一行

value: > hello

world!

\# 輸出:hello 空格 world!
YAML在項目中的實際應用
開始實踐,yaml使用的時候,經常是組合寫法的,也就是對象、字面值等等一起組合使用的,本文結合Springboot,介紹一下這種用法,在Springboot中,yaml語言被用于配置屬性,這種寫法很簡潔,值得推廣
在Springboot項目的resources目錄中添加application.yml文件,注意文件名字不能寫錯,后綴可以使yaml或者yml都可以,該配置文件springboot項目啟動的時候會自動加載
內容如下:

\## 測試ConfigurationProperties

user:

userName: root

isAdmin: true

regTime: 2020/01/01

isOnline: 1

maps: {k1 : v1,k2: v2}

lists:

- list1

- list2

address:

tel: 15899988899

name: 上海市
2. 編寫測試bean類進行映射

2.1 User類

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@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;
}

}
解釋:
@Component

需要將配置文件中每個屬性都映射到這個組件,注意:記得加@Component注解,這樣才能將這個組件加載到Spring容器中

@ConfigurationProperties(prefix = "user")

通過prefix屬性配置的user在配置文件中綁定user對象,將配置文件中的屬性值直接映射到bean屬性中

2.2 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;

}

}
3. 測試

ok,這時候啟動項目的時候就可在容器中直接使用user對象了,現在我們使用spirng自帶的測試類,測試一下

import com.example.easy.entity.Stu;
import org.junit.jupiter.api.Test;
importorg.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
class EasyApplicationTests {

@Autowired
User user;
@Test
public void testConfigurationProperties(){

System.out.println(user);

}

}

說明:
使用@Autowired裝配bean直接輸出節課(也可以使用其他的注解進行裝配)

運行效果
User{userName='root', isAdmin=false, regTime=Wed Jan 01 00:00:00 CST 2020, isOnline=1, maps={k1=v1, k2=v2}, lists=[list1, list2], address=Address{tel='15899988899', name='上海市'}}

免費學習視頻歡迎關注云圖智聯:


Java幫幫學習群生態

Java幫幫學習群生態

總有一款能幫到你

Java學習群

Java學習群

與大牛一起交流

大數據學習群

大數據學習群

在數據中成長

九點編程學習群

九點編程學習群

深夜九點學編程

python學習群

python學習群

人工智能,爬蟲

測試學習群

測試學習群

感受測試的魅力

Java幫幫生態承諾

Java幫幫生態承諾

一直堅守,不負重望

初心
勤儉
誠信
正義
分享
友鏈交換:加幫主QQ2524138991 留言即可 24小時內答復  
業司
教育資訊
會員登錄
獲取驗證碼
登錄
登錄
我的資料
留言
回到頂部