yaml
1.yaml介紹
YAML是 "YAML Ain't a Markup Language" (YAML不是一種標記語言)的遞回縮寫,在開發這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),是為了強調這種語言以資料為中心,而不是以標記語言為重點,而使用了反向略縮語重命名
- YAML 以資料為中心,而不是以標記語言為重點
- YAML 仍然是一種標記語言,但是和傳統的標記語言不一樣,是以資料為中心的標記語言
- YAML 非常適合用來做以資料為中心的組態檔,比如SpringBoot中使用application.yaml
官方檔案:https://yaml.org/
java操作yaml檔案
2.基本語法
- 形式為
key: value(注意:后有空格) - 區分大小寫
- 使用縮進表示層級關系
- 縮進不允許使用tab,只能使用空格(有些地方識別tab,但推薦使用空格)
- 縮進的空格數不重要,只要保證相同層級的元素左對齊即可
- 字串無需加引號
- #表示注釋該行
3.資料型別
3.1字面量
字面量表示單個的,不可再分的值,包括字串、布林值、整數、浮點數、Null、日期型別,
- 字串 默認不用加引號,如果包含空格或特殊字符必須加引號,單引號或雙引號都可以
userId: S123
username: "lisi"
password: '123456'
province: 山東
city: "濟南 : ss"
- 布林值
success: true
- 整數
age: 13
- 浮點數
weight: 75.5
- Null
gender: ~
- 時間 使用[ISO8601](https://baike.baidu.com/item/ISO 8601/3910715?fr=aladdin)標準
createDate: 2001-12-14T21:59:43.10+05
3.2物件
物件,鍵值對的集合,比如map、hash、object
- 寫在一行
k: {k1: v1,k2: v2,k3: v3}
address: {province: 山東, city: 濟南}
- 寫在多行
k:
k1: v1
k2: v2
k3: v3
address:
province: 山東
city: 濟南
3.3陣列
陣列:一組按照次序排列的值,比如array、list、queue、set
- 寫在一行
k: [v1, v2, v3]
hobbyList: [游泳, 跑步]
- 寫在多行
k:
- v1
- v2
- v3
hobbyList:
- 游泳
- 跑步
4.應用實體
- 使用yaml組態檔,和Javabean進行資料系結
(1)創建一個新的SpringBoot專案
(2)在pom.xml檔案中引入相關的庫
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.3</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
(3)Bean Car.java
注意創建的bean需要在SpringBootApplication包或者其子包,否則不會被掃描,同時也不能完全使用Lombok的相關簡化注解
package com.li.bean;
import lombok.Data;
/**
* @author 李
* @version 1.0
*/
@Data
public class Car {
private String name;
private Double price;
}
(3)Bean Monster.java
package com.li.bean;
import lombok.Data;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author 李
* @version 1.0
*/
@ConfigurationProperties(prefix = "monster")
@Component
@Data
public class Monster {
private Integer id;
private String name;
private Integer age;
private Boolean isMarried;
private Date birth;
private Car car;
private String[] skill;
private List<String> hobby;
private Map<String, Object> wife;
private Set<Double> salaries;
private Map<String, List<Car>> cars;
}
(4)HiController.java
package com.li.controller;
import com.li.bean.Monster;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author 李
* @version 1.0
*/
@RestController//@Controller+@ResponseBody
public class HiController {
@Resource
private Monster monster;
@RequestMapping("/monster")
public Monster monster(){
return monster;
}
}
(5)啟動類
package com.li;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author 李
* @version 1.0
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
這時啟動專案,訪問控制器,回傳的Monster物件的資料為null
(6)使用yaml給Javabean系結資料
檔案支持yaml或者yml兩種后綴,并且在撰寫application.yaml時,這些bean的欄位是可以通過安裝插件或者jar來自動提示的
創建resources/application.yaml
monster:
id: 100
name: 牛魔王
age: 899
isMarried: true
birth: 1989/11/23
# 物件
# car: {name: 寶馬, price: 200000.0}
car:
name: 賓利
price: 300000
# 陣列
# hobby: [打籃球, 游泳]
hobby:
- 籃球
- 羽毛球
skill: [芭蕉扇, 吐火]
#map-屬于物件型別
# wife: {no1: 玉面狐貍,no2: 鐵扇公主} #行內風格
wife:
no1: 玉面狐貍
no2: 鐵扇公主
# salaries: [10000, 20000] #行內
salaries:
- 10000
- 20000
cars:
group1:
- {name: 寶馬, price: 200000}
- name: 保時捷
price: 400000
group2:
- {name: 賓利, price: 300000}

5.yaml使用細節
-
SpringBoot中,組態檔的三種格式:
-
application.properties
-
application.yml(推薦)
-
application.yaml
yml 格式和 yaml 格式除了后綴不一樣,里面格式完全一樣,可以看作是一種格式
-
-
組態檔的加載優先級 properties(最高) > yml > yaml(最低)
-
不同組態檔中相同的配置,按優先級高的指定,不同組態檔,如果有不同的配置,則全部保留
-
如果yaml檔案沒有提示,可以引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuratin-processor</artifactId> <optional>true</optional> </dependency>或者安裝yaml插件

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547128.html
標籤:其他
