企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
YAML是YAML Ain’t markup language的缩写,表明其不是一种标记语言(xml、html是标记语言)。它是一种数据序列化语言,通过一定的格式表示数据结构。由于其良好的数据结构表现能力,既方便程序处理,也方便程序员阅读,所以其常常被用于书写配置文件。[https://baike.baidu.com/item/YAML/1067697?fr=aladdin](https://baike.baidu.com/item/YAML/1067697?fr=aladdin) ## 一、YAML写法 数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。样例如下: 举个例子 ~~~ # 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:字符串的单引号与双引号 ![](https://img.kancloud.cn/78/7c/787c9a68cdcc915b2c00b2bdba8a2785_806x276.png) * 双引号: 会转义字符串里面的特殊字符,如下面\\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} ~~~ ## 注意: 1. 字串不一定要用双引号标识; 2. 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符); 3. 允许在文件中加入选择性的空行,以增加可读性; 4. 在一个档案中,可同时包含多个文件,并用“——”分隔; 5. 选择性的符号“...”可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)。