day05-2-yaml
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/
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插件

day05-2-yaml的更多相关文章
- C#与yaml解析
YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...
- SpringBoot中yaml配置对象
转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...
- YAML 语法
YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...
- golang使用yaml格式解析构建配置文件
现在主流的配置文件格式有这么几种,xml.yaml.config… xml就算了,太挫了,太土, 太繁琐… config 就是mysql,apache my.cnf的那种格式,这个格式适合功能分层, ...
- yaml
YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...
- Cassandra 配制 cassandra.yaml
一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...
- 雅美尓(yaml)实战
献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...
- 用Yaml文件进行元素管理【转】
原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...
- Java使用snakeyaml解析yaml
YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...
- JSON+YAML初步学习+ciscoconfparse
Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...
随机推荐
- java stream map和 flatmap区别
区别:map mapper返回R,flatMap mapper返回Stream<R> 官网解释 1,<R>Stream<R> flatMap(Function< ...
- mqtt的使用
1.mqttws31.js /******************************************************************************* * Cop ...
- 记一次mybatis中like 不执行sql的问题,单引号 与双引号的坑
使用环境: springboot 2.0.4 mybatis-spring:1.3.2 错误也是比较蛋疼: 不报错,但是查询出来的结果不对. 原错误sql 示意: select * from ...
- 关于 java 上传,下载和导入报java.lang.IllegalStateException异常解决办法
java.lang.IllegalStateException异常解决办法 最近在使用response.sendRedirect()时出现如下错误:java.lang.IllegalStateExc ...
- vue实现自定义字体库
先看效果是不是你所需要的,再看具体如何实现. 效果如下图所示: 有些字体需要下载,用图片就会变得很不清楚,这样我们就需要去下载字体库,操作步骤如下: 首先找到需要下载的字体库 然后放在项目里面 然后定 ...
- Django框架搭建web项目(三)
参考官网文档:https://docs.djangoproject.com/zh-hans/4.0/intro/tutorial02/ 在生成的app中进行数据库表设计. 1.在路径H:\myproj ...
- 洛谷P1203 坏掉的项链
洛谷P1203 坏掉的项链 首先看到这题的数据样例,3<=n<=350,不是水水暴搜就过了嘛 不难想到暴力解,先破环成链 因为可能有全部都可换成一种颜色的情况,考虑每次遇到s[i]==s[ ...
- 枚举类list序列化与反序列化
//序列化 public class AuthTypeEnumListJsonSerializer extends JsonSerializer<List> { @Override pub ...
- AT ARC092F Two Faced Edges
题意:给定一个有向图,保证无重边自环,求将图中的每条边反向后强联通分量的个数是否会改变. 数据范围:$n$ $≤$ $1e3$,$m$ $≤$ $2e5$. 首先考虑一条边的影响. 因为一条边只能连接 ...
- redis缓存lua脚本过多导致内存占用很多问题
现象 生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降. 排查与分析 通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然 ...