yaml的介绍与使用
1.yaml介绍
YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写。在开发这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),是为了强调这种语言以数据为中心,而不是以标记语言为重点,而使用了反向略缩语重命名
- YAML 以数据为中心,而不是以标记语言为重点
- YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言
- YAML 非常适合用来做以数据为中心的配置文件,比如SpringBoot中使用application.yaml
官方文档:The Official YAML Web Site
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](国际标准化组织_百度百科 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文件中引入相关的库
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
(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 | |
private Map | |
private Set | |
private Map | |
} |
(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文件没有提示,可以引入依赖
org.springframework.boot spring-boot-configuratin-processor true 或者安装yaml插件

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
