YAML语法
- YAML使用 Unicode 编码作为标准字符编码
- 大小写是敏感
.yaml
或.yml
做为后缀- 缩进代表层级关系,只能用空格 (不能用 tab 键) 空格数一般为 2 相同即可,同级左对齐
YAML 使用方式
- 日期
# 日期使用ISO 8601格式,即:yyyy-MM-dd
date: 2019-03-13
# windows 为系统定义的格式
date: 2020/7/28
- 时间
# 时间使用ISO 8601格式,时间和日期之间使用T连接,使用+或者-代表时区
datetime: 2019-03-13T20:49:33+08:00
- 数字
# int值支持,二进制,八进制,十六进制
二进制: 0b1010_0111_1010_1110
八进制: 以 0 开头,后面跟上(0-7)=>0 (0-7)=>0(10115)
十六进制: 0x 开,(0-9,a-f)跟
特别注意, 就算用字符串接收, 程序内部也是先读取到 Object.class, 最后再转成你接收的值 (如 String.class), 所以
010
读取到 String 变为了8
- null值
使用~表示null
nullvalue: ~
相当于{ nullvalue: null }
- Map(键值对)
people: { name: zhangsan, age: 20 }
等于:
people:
name: zhangsan
age: 20
- 数组
color: [blue, red, green]
等于:
color:
- blue
- red
- green
?
(问号+空格): 复杂键 Complex mapping key (key 可以为数字, 特殊字符等)
? [blue, red, green]: value
含义:
key 是一个数组, 里面是 blud, red, green
value 是冒号后面的值
!: "abc"
含义:
key: "!"
value: "abc"
Reference: https://stackoverflow.com/questions/33987316/what-is-a-complex-mapping-key-in-yaml
- 使用缩进表示的对象列表
items:
- item: cpu
model: i3
price: ¥800.00
- item: HD
model: WD
price: ¥450.00
等于
items: [ {item:cpu, model:i3, price:¥800.00}, {item:HD, model:WD, price: ¥450.00} ]
-
文本块
- 使用
|
接 “文本 + 缩进” 表示: 保留回车换行。 - 使用
>
接 “文本 + 缩进” 表示: 回车替换为空格,最终成一行 - 使用定界符
"内容"
(双引号)、'内容'
(单引号)会保留换行符 - 若单引号之中还有单引号,则必须连续使用两个单引号转义
- 使用
run: |
mkdir -p ~/.ssh
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "howeres"
git config --global user.name "howeres@email.com"
npm install hexo-cli -g
npm install
strvalue: newline
字符串类的值,也可以使用单引号或双引号,若字符串中包含有空格或者特殊字符,则必须使用单引号或者双引号,双引号与单引号还有不同,双引号不会对特殊字符转义,若单引号之中还有单引号,则必须连续使用两个单引号转义
字符串可以拆成多行,每一行会被转成一个空格,对于多行字符串可以使用|保留换行符,也可以使用>折叠换行,使用+表示保留文字块末尾的换行,使用-表示删除字符串末尾的换行
字符串也可以HTML标记
strvalue: 'new\nline'
使用单引号相当于{ strvalue: 'new\\nline' }
strvalue: "new\nline"
使用双引号相当于{ strvalue: 'new\nline' },双引号不会对特殊字符转义
strvalue: new
line
字符串可以拆成多行,每一行会被转成一个空格,相当于{ strvalue: 'new line' }
strvalue: |
new
line
使用|来表示需要保留换行符,相当于{ strvalue: 'new\nline\n' }
strvalue: >
new
line
使用>折叠换行,相当于{ strvalue: 'new line\n' }
strvalue: |+
new
line
使用+表示保留末尾的换行,相当于{ strvalue: 'new\nline\n' }
strvalue: |-
new
line
使用-表示删除末尾的换行,相当于{ strvalue: 'new\nline' }
strvalue: |
<p style="color: red">
newline
</p>
相当于{ strvalue: '<p style="color: red">\n newline\n</p>\n' }
- “!”(叹号)显式指示类型,或自定义类型标识。单叹号是自定义类型,双叹号是内置类型
!!int # 整数类型
!!float # 浮点类型
!!bool # 布尔类型 可以是True,true,tRue,False等,忽略大小写
!!str # 字符串类型
!!binary # 也是字符串类型
!!timestamp # 日期时间类型 ISO8601格式
!!null # 空值
!!set # 集合
!!omap, !!pairs # 键值列表或对象列表
!!seq # 序列,也是列表
!!map # 键值表
例如:
isString: !!str 2015-08-23
会进行强转:
str: !!str 3.14
int: !!int "123"
输出:{'int': 123, 'str': '3.14'}
-
锚点与引用,定义数据的复用。
- 使用 “&” 定义数据锚点(即要复制的数据)
- 使用 “*” 引用上述锚点数据(即数据的复制目的地)
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa # 定义要复制的数据
rbi:
- *SS # Subsequent occurrence 这里是数据复制目标
- Ken Griffey
defaults: &defaults
adapter: postgres
host: localhost
database1:
<<: *defaults
database: db1
database2: *defaults
- 使用注解 @Value 映射
@Value("${service.port:8090}") // 美元花括号,冒号后面是默认值
在使用@ConfigurationProperties(prefix = "thread-pool", ignoreUnknownFields = false)
时,yml 文件内可以是propertyName
或 property-name
,(i.e., 松散绑定,是 SpringBoot 的内部约定)