淘先锋技术网

首页 1 2 3 4 5 6 7

一、概述

与properties文件,json格式三者都是配置属性文件;yaml 语言可以编写 .yml 文件,相比之下,YAML 是专门用来写配置属性文件的语言,非常简洁和强大,远比 JSON 格式方便。

二、yml配置文件

2.1 yml分析

——一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言。
——适应场景 脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用
—— 序列化: YAML是由宿主语言数据类型直转,的比较适合做序列化。
—— 配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。
——语言优点 YAML易于人们阅读。 YAML数据在编程语言之间是可移植的。 YAML匹配敏捷语言的本机数据结构。 YAML具有一致的模型来支持通用工具。 YAML支持单程处理。 YAML具有表现力和可扩展性。

2.2 YAML 语法

——使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)
——‘#’表示注释,只能单行注释,从#开始处到行尾
——破折号后面跟一个空格(a dash and space)表示列表
——用冒号和空格表示键值对 key: value
——简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符

2.3 配置数据

——配置普通数据
语法: key: value
代码演示:

name: zhangsan

说明:value之前有一个空格

—— 配置对象数据
语法:

#方式一
​ key:
​ key1: value1
​ key2: value2

#方式二
​ key: {key1: value1,key2: value2}

示例代码:

#方式一
person:
  name: zhangsan
  age: 18
  addr: henan
 #方式二
person: {name: zhangsan,age: 18,addr: henan}

说明:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别

——配置Map数据
与配置对象方式相同

—— 配置数组(List、Set)数据
语法:

#方式一
​ key:- value1
​ - value2
#方式二
​ key: [value1,value2]

示例代码:

city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
  
#或者
city: [beijing,tianjin,shanghai,chongqing]
#集合中的元素是对象形式
student:
  - name: zhangsan
    age: 18
    score: 100
  - name: lisi
    age: 28
    score: 88
  - name: wangwu
    age: 38
    score: 90
说明:value1与 - 之间存在一个空格

例子:

#普通数据配置
name: 张三
#对象的配置
person:
  name: 张三
  age: 18
  addr: 北京

#行内对象配置
person: {name: 张三,age: 18,addr: 北京}

#配置数据、集合(普通字符串)
city:
  - beijing
  - shanghai
  - tianjin

city: [beijin,tianjin,shanghai]

#配置数据、集合(对象数据)
student:
  - name: 张三
    age: 18
    addr: beijin
  - name: 李四
    age: 19
    addr: tianjin

student: [{name: zhangsan,age: 19,addr: beijin},{name: lishi,age: 20,addr: beijin}]

#map配置
map:
  key1: value1
  key2: value2

2.4 获取数据

#方式一:

@Controller
public class quickController {
    //从容器中获取对象的的值
    @Value("${name}")
    private String name;
    @Value("${person.addr}")
    private String addr;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        //获取配置文件的信息
        return "name:"+name+",addr="+addr;
    }
}
#方式二(@ConfigurationProperties):

@Controller
@ConfigurationProperties(prefix = "person")
public class quick2Controller {
    //从容器中获取对象的的值
    private String name;
    private String addr;
    //这种方式需要提供set,get方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @RequestMapping("/quick2")
    @ResponseBody
    public String quick2(){
        //获取配置文件的信息
        return "name:"+name+",addr="+addr;
    }
}