一、设计一个YAML数据结构
首先我们提出这样一个需求:
# 1. 一个家庭有爸爸、妈妈、孩子。
# 2. 这个家庭有一个名字(family-name)叫做“happy family”
# 3. 爸爸有名字(name)和年龄(age)两个属性
# 4. 妈妈有两个别名
# 5. 孩子除了名字(name)和年龄(age)两个属性,还有一个friends的集合
# 6. 每个friend有两个属性:hobby(爱好)和性别(sex)
上面的数据结构用yaml该如何表示呢?
family:
family-name: "happy family"
father:
name: zimug
age: 18
mother:
alias:
- lovely
- ailice
child:
name: zimug
age: 5
friends:
- hobby: football
sex: male
- hobby: basketball
sex: female
或者是friends的部分写成
friends:
- {hobby: football,sex: male}
- {hobby: basketball,sex: female}
规则1:字符串的单引号与双引号
双引号: 会转义字符串里面的特殊字符,如下面\n被转义为换行:
name: “zhangsan \n lisi”:输出:zhangsan 换行 lisi
单引号: 不会转义特殊字符,特殊字符最终只是作为一个普通的字符串数据,如:
name: ‘zhangsan \n lisi’:输出:zhangsan \n lisi
规则2:支持松散的语法
在spring Boot应用中YAML数据格式支持松散的绑定语法,也就是下面的三种key都是一样的。
family-name = familyName = family_name
但是不绝对,笔者印象中曾经遇到过某些写法不被兼容的情况。我通常使用中划线分隔的这种语法。
二、配置文件占位符
Spring Boot配置文件支持占位符,一些用法如下:为persopn.age设置一个随机数
person:
age: ${random.int}
2.1 随机数占位符
${random.value} - 类似uuid的随机数,没有"-"连接
${random.int} - 随机取整型范围内的一个值
${random.long} - 随机取长整型范围内的一个值
${random.long(100,200)} - 随机生成长整型100-200范围内的一个值
${random.uuid} - 生成一个uuid,有短杠连接
${random.int(10)} - 随机生成一个10以内的数
${random.int(100,200)} - 随机生成一个100-200 范围以内的数
2.2 默认值
占位符获取之前配置的值,如果没有可以是用“冒号”指定默认值
格式例如,xxxxx.yyyy是属性层级及名称,如果该属性不存在,冒号后面填写默认值
${xxxxx.yyyy:默认值}
比如为配置father.best属性,如果family.father.name存在则father.best=${family.father.name},family.father.name这个配置不存在,则取值father.best=zimug:
father:
best: ${family.father.name:zimug}