Spring Boot YAML语法及占位符
一、什么是YAML
YAML是YAML Ain’t markup language的缩写,表明其不是一种标记语言(xml、html是标记语言)。它是一种数据序列化语言,通过一定的格式表示数据结构。由于其良好的数据结构表现能力,既方便程序处理,也方便程序员阅读,所以其常常被用于书写配置文件。
以前使用 XML 来进行配置的时候,如一个端口配置,要写为:
<server>
<port>8081<port>
</server>
若使用 YAML 来配置,则表示为:
server:
prot: 8081
可以看出相比 XML,YAML 对于数据的配置更加直观,易于理解。
二、YAML文件基本语法
YAML的语法非常严格!
- 空格不能省略
- 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
- 属性和值的大小写都是十分敏感的。
1、普通字段
name: zhangsan
注意:值不加引号
2、对象、Map
对象、Map的配置方式是一样的。
student:
name: zhangsan
age: 3
行内写法:
student: {name: zhangsan,age: 3}
3、数组、List
用 - 值表示数组中的一个元素,比如:
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
三、设计一个YAML数据结构
首先我们提出这样一个需求:
# 1. 有一个人名字(name)叫"Tom",年龄(age)为18岁
# 2. Tom的兴趣爱好(hobby)比较广泛,会打篮球(basketball),足球(football),游泳(swimming)
# 3. Tom有两位好朋友(friends)
# 4. 其中一位好朋友名字(name)叫"Mark",年龄(age)为17岁
# 5. 另一位好朋友名字(name)叫"Louis",年龄(age)为19岁
上面的数据结构用yaml该如何表示呢?
person:
name: Tom
age: 18
hobby:
- basketball
- football
- swimming
friends:
- name: Mark
age: 17
- name: Louis
age: 19
或者
person:
name: Tom
age: 18
hobby: [basketball, football, swimming]
friends:
- {name: Mark,age: 17}
- {name: Louis,age: 19}
注意事项1:字符串的单引号与双引号
-
双引号: 会转义字符串里面的特殊字符,如下面\n被转义为换行:
name: “zhangsan \n lisi”:输出:zhangsan 换行 lisi -
单引号: 不会转义特殊字符,特殊字符最终只是作为一个普通的字符串数据,如:
name: ‘zhangsan \n lisi’:输出:zhangsan \n lisi
注意事项2:支持松散的语法
在spring Boot应用中YAML数据格式支持松散的绑定语法,也就是下面的三种key都是一样的。
country-name = countryName= country_name
四、YAML配置文件占位符
Spring Boot配置文件支持占位符,一些用法如下:为persopn.age设置一个随机数
person:
age: ${random.int}
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、默认值
占位符获取之前配置的值,如果没有可以是用“冒号”指定默认值
格式例如,xxxxx.yyyy是属性层级及名称,如果该属性不存在,冒号后面填写默认值
${xxxxx.yyyy:默认值}
比如为配置mother.best属性,如果family.mother.name存在则mother.best=${family.mother.name},family.mother.name这个配置不存在,则取值mother.best=lucy:
mother:
best: ${family.mother.name:lucy}
一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。
通俗易懂,深入浅出,一篇文章只讲一个知识点。
在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
文章不涉及代码,不烧脑细胞,人人都可以学习。
当你决定关注「一点教程」,你已然超越了90%的程序员!