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 ...
随机推荐
- How to Check and Repair EXT4 Filesystem in Linux
The fsck (stands for File System Consistency Check) is used to check and repair one or more Linux fi ...
- 【2020NOI.AC省选模拟#2】A. 旋转
题目链接 原题解: 把每个点的坐标视为复数,那么每次询问就是区间求平均数(先求和然后除以个数).一个点绕着原点旋转就是乘以$(\cos 60^\circ +i\sin 60^\circ)$. 一个点绕 ...
- ssh 解决远程桌面端口问题
昨天做好今天编辑 先上图 后编辑 需求:因操作失误光猫nat只剩一个可访问命令行的7000端口 前提:7000端口映射内网的22端口,可以登录ssh 解决思路:先vnc安装, gui界面安装 , 然 ...
- 【摘】python和它的super
python和它的super 如果用过python2,你一定见过下面这个奇怪的代码 class Mama(object): def says(self): print('i am mama') cla ...
- snpEFF注释的vcf文件转化成maf文件
利用一个perl语言写的工具:snpeffTomaf 一行代码即可实现非常方便 github地址链接:https://github.com/tsy19900929/snpeffToMaf 将此仓库中的 ...
- white album句子
1.不论是真心的笑,还是真心的生气,我都做不到.我只是个胆小的骗子.
- 20220718 第七组 陈美娜 java
如果把变量直接声明在类里:成员变量(全局变量)成员变量->属性 如果把变量声明在某个方法里:局部变量 public:访问权限修饰符,后面讲 void:没有返回值 run():方法名,标识符 {} ...
- 06 HBase安装与伪分布式配置
1.下载压缩文件 2.解压 3.修改文件夹名 4.修改文件夹权限 5.配置环境变量 6.伪分布式配置文件 7.启动HDFS,启动Hbase 8.进入shell界面 9.停止Hbase,停止HDFS运行
- maven远程debug
1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 添加参数 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- AT212 P-CASカードと高橋君
题目描述 高桥君为了准备即将到来的7月27日土用丑日,打算邮购一些高级鳗鱼食材,通过网上银行来支付. 高桥君使用的银行卡背面有下图所示的9×9密码表.支付的时候从表中某一位置开始根据指定的方向连续读4 ...