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. mybatis纵览

    Mybatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作. MyBatis 可 ...

  2. Coursera Programming Languages, Part B 华盛顿大学 Week 3

    ML Versus Racket 同 函数编程模式 (with constructs that encourage a functional style) 不鼓励 mutation (但提供了支持 m ...

  3. BASE64编码作业

    BASE64编码作业 什么是BASE64编码 ase64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  4. 某星球存在两种生物,A种生物有1个头6条腿,B种生物有3个头4条腿。来自地球的太空船刚刚在该星球降落, 突然发现一大群这两种生物组成的队伍,由于时间紧,只数了头的数量和腿的数量,请帮助宇航员分析A、B两种生物各有多少个。

    package competition;import java.util.Scanner;/*        某星球存在两种生物,A种生物有1个头6条腿,B种生物有3个头4条腿.来自地球的太空船刚刚在 ...

  5. 29 Django自定义模板功能

    在相应的app文件夹中,创建templatetags文件夹,必须是templatetags文件夹命名: 注意:templatetags文件夹中必须要有__init__.py文件 jd.py: from ...

  6. Pnetlab中锐捷镜像反复重启或telnet无法键入内容

    PNETLab 版本: 5.2.7 或 5.3.3等 锐捷镜像版本: V1.03 故障详情: 基于前文的系统环境和锐捷镜像.替换后的yml文件,更新PnetLAB版本到5.3.3后,设备循环重启,无法 ...

  7. linux Usb serial console

    ubuntu Usb serial console 能够把下电时打印输出到串口上,可以记录,而netconsole只能输出下电到disk 之前的打印 Usb串口线,ftdi或pl2303都可以 如果是 ...

  8. List一边插入数据后又移除数据

    记录最简单的三种方法,直接上代码: List<String> list = new ArrayList<>(); list.add("1"); list.a ...

  9. gcc的编译过程

    1. 预处理,生成 .i 的文件.(input) 2. 将 .i的文件转换成汇编语言,生成 .s 的文件 3.生成机器语言文件,.o的文件 4.连接目标代码,生成可执行文件 .out

  10. 在CentOS下安装nginx+php环境

    一.nginx 安装 1. 在nginx官网下载nginx源码 提供一个nginx官网下载地址: http://nginx.org/download/nginx-1.12.2.tar.gz 注意:请先 ...