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.基本语法

  1. 形式为key: value(注意:后有空格)
  2. 区分大小写
  3. 使用缩进表示层级关系
  4. 缩进不允许使用tab,只能使用空格(有些地方识别tab,但推荐使用空格)
  5. 缩进的空格数不重要,只要保证相同层级的元素左对齐即可
  6. 字符串无需加引号
  7. #表示注释该行

3.数据类型

3.1字面量

字面量表示单个的,不可再分的值,包括字符串、布尔值、整数、浮点数、Null、日期类型。

  • 字符串 默认不用加引号,如果包含空格或特殊字符必须加引号,单引号或双引号都可以
userId: S123
username: "lisi"
password: '123456'
province: 山东
city: "济南 : ss"
  • 布尔值
success: true
  • 整数
age: 13
  • 浮点数
weight: 75.5
  • Null
gender: ~
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使用细节

  1. SpringBoot中,配置文件的三种格式:

    • application.properties

    • application.yml(推荐)

    • application.yaml

    yml 格式和 yaml 格式除了后缀不一样,里面格式完全一样,可以看作是一种格式

  2. 配置文件的加载优先级 properties(最高) > yml > yaml(最低)

  3. 不同配置文件中相同的配置,按优先级高的指定,不同配置文件,如果有不同的配置,则全部保留

  4. 如果yaml文件没有提示,可以引入依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuratin-processor</artifactId>
    <optional>true</optional>
    </dependency>

    或者安装yaml插件

day05-2-yaml的更多相关文章

  1. C#与yaml解析

    YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...

  2. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  3. YAML 语法

    YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...

  4. golang使用yaml格式解析构建配置文件

    现在主流的配置文件格式有这么几种,xml.yaml.config…  xml就算了,太挫了,太土, 太繁琐… config 就是mysql,apache my.cnf的那种格式,这个格式适合功能分层, ...

  5. yaml

    YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...

  6. Cassandra 配制 cassandra.yaml

    一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...

  7. 雅美尓(yaml)实战

    献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...

  8. 用Yaml文件进行元素管理【转】

    原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...

  9. Java使用snakeyaml解析yaml

    YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...

  10. JSON+YAML初步学习+ciscoconfparse

    Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...

随机推荐

  1. java stream map和 flatmap区别

    区别:map mapper返回R,flatMap mapper返回Stream<R> 官网解释 1,<R>Stream<R> flatMap(Function< ...

  2. mqtt的使用

    1.mqttws31.js /******************************************************************************* * Cop ...

  3. 记一次mybatis中like 不执行sql的问题,单引号 与双引号的坑

    使用环境: springboot 2.0.4 mybatis-spring:1.3.2 错误也是比较蛋疼:  不报错,但是查询出来的结果不对. 原错误sql 示意:  select  * from  ...

  4. 关于 java 上传,下载和导入报java.lang.IllegalStateException异常解决办法

    java.lang.IllegalStateException异常解决办法  最近在使用response.sendRedirect()时出现如下错误:java.lang.IllegalStateExc ...

  5. vue实现自定义字体库

    先看效果是不是你所需要的,再看具体如何实现. 效果如下图所示: 有些字体需要下载,用图片就会变得很不清楚,这样我们就需要去下载字体库,操作步骤如下: 首先找到需要下载的字体库 然后放在项目里面 然后定 ...

  6. Django框架搭建web项目(三)

    参考官网文档:https://docs.djangoproject.com/zh-hans/4.0/intro/tutorial02/ 在生成的app中进行数据库表设计. 1.在路径H:\myproj ...

  7. 洛谷P1203 坏掉的项链

    洛谷P1203 坏掉的项链 首先看到这题的数据样例,3<=n<=350,不是水水暴搜就过了嘛 不难想到暴力解,先破环成链 因为可能有全部都可换成一种颜色的情况,考虑每次遇到s[i]==s[ ...

  8. 枚举类list序列化与反序列化

    //序列化 public class AuthTypeEnumListJsonSerializer extends JsonSerializer<List> { @Override pub ...

  9. AT ARC092F Two Faced Edges

    题意:给定一个有向图,保证无重边自环,求将图中的每条边反向后强联通分量的个数是否会改变. 数据范围:$n$ $≤$ $1e3$,$m$ $≤$ $2e5$. 首先考虑一条边的影响. 因为一条边只能连接 ...

  10. redis缓存lua脚本过多导致内存占用很多问题

    现象 生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降. 排查与分析 通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然 ...