语法规则
- 文件后缀.yml
- 大小写敏感
- 空格缩进区分层级,且空格数量不要求,对齐即可(通常开头缩进 2 个空格。字符后缩进 1 个空格,如冒号、逗号等。)
- # 来表示注释
# This is a comment
name: John Doe # This is an inline comment
数据类型
1、 标量:标量是单个的、不可分的值。
2、复合类型
字符串
- 字符串(String):可以用引号,也可以不用。例如:
name: "John Doe"
greeting: Hello, world!
整数
- 整数(Integer):例如:
age: 25
浮点数
- 浮点数(Float):例如:
price: 19.99
布尔值
- 布尔值(Boolean):true 或 false。例如:
is_active: true
Null
- Null:null 或 ~。例如:
field: null
日期和时间
- 日期和时间:YAML支持多种日期和时间的格式。例如:
date: 2002-12-14
timestamp: 2001-12-15T02:59:43.1Z
序列
- 序列(Sequence):序列是一组按顺序排列的值,类似于数组或列表。它有好几种表示方式
块样式,每个项占一行,每个项前面有一个破折号(-)和一个空格。
fruits:
- Apple
- Banana
- Orange
流样式,所有的项在一行内,用逗号分隔,整个序列用方括号括起来。
fruits: [Apple, Banana, Orange]
混合样式,你也可以在一个序列中混合使用块样式和流样式。
fruits:
- Apple
- Banana
- [Orange, Grape, Pineapple]
复杂序列:序列的项可以是任何类型的数据,包括标量、序列、映射等。
people:
- name: John Doe
age: 30
- name: Jane Doe
age: 28
映射
- 映射(Mapping):映射是一组键值对,类似于哈希表或字典。支持多种样式表示
块样式,每个键值对占一行,键和值之间用冒号(:)分隔。
person:
name: John Doe
age: 30
流样式,所有的键值对在一行内,用逗号分隔,整个映射用花括号括起来。
person: {name: John Doe, age: 30}
混合样式:你也可以在一个映射中混合使用块样式和流样式。
person:
name: John Doe
age: 30
children: {first: Alice, second: Bob}
复杂映射:映射的值可以是任何类型的数据,包括标量、序列、映射等。
person:
name: John Doe
age: 30
children:
- name: Alice
age: 5
- name: Bob
age: 3
特殊符号
-
:
(冒号):用于分隔键和值。例如:key: value
。 -
-
(减号):用于表示列表中的项。例如:
- item1
- item2
#
(井号):用于表示注释。以#
开头的内容会被视为注释,不会被解析。
# 这是一个注释
key: value
"
(双引号)和'
(单引号):用于包含字符串,可以是双引号包含或单引号包含,用于确保字符串中的特殊字符不被解析。例如:
double_quoted: "This is a string with special characters like \n and \t."
single_quoted: 'This is another string with special characters like \n and \t.'
&
(&符号)和*
(星号):用于创建和引用锚点和别名。锚点用于标记一个值,而别名用于引用该值。例如:
- &anchor value1
- *anchor # 此处引用了上面的锚点,值为 value1
!
(感叹号):用于标记数据类型。例如!str
表示字符串类型,!int
表示整数类型。
key: !str This is a string
|
和>
:用于多行文本块。|
表示保留换行符,>
表示折叠换行符为一个空格。例如:
multiline: |
This is a multiline
string with line breaks.
folded: >
This is a folded
string with line breaks.
映射规则
-
下划线
_
分隔的键:- YAML 中的键:
my_key
- 映射到 Java 类属性:
myKey
(驼峰命名)
- YAML 中的键:
-
中划线
-
分隔的键:- YAML 中的键:
my-key
- 映射到 Java 类属性:
myKey
(驼峰命名)
- YAML 中的键:
-
省略分隔符
-
或_
:- YAML 中的键:
mykey
- 映射到 Java 类属性:
mykey
(保持不变)
- YAML 中的键:
-
使用驼峰命名的键:
- YAML 中的键:
myKey
- 映射到 Java 类属性:
myKey
(保持不变)
- YAML 中的键:
-
使用帕斯卡命名的键:
- YAML 中的键:
MyKey
- 映射到 Java 类属性:
MyKey
(保持不变)
- YAML 中的键:
$的使用
可以使用${}来应用定义的变量
可以定义变量的地方:
在properties文件或yml文件:定义:my.property=value,引用${my.property}
通过操作系统环境变量配置: ${ENV_VAR_NAME}。例如,如果系统环境中存在 MY_ENV_VARIABLE,则可以这样引用
通过启动时命令行定义变量:如 --my.argument=value,这些参数可以通过 ${command.line.argument} 的形式在配置文件中引用。
通过java系统属性:-Dmy.system.property=myValue, ${system.property.name}
通过嵌入式文件:通过 spring.config.import 属性导入额外的配置源。这些外部配置文件中的变量也可以被${}引用。
RandomValuePropertySource:Spring Boot提供了 RandomValuePropertySource,用于生成随机数或UUID。例如,${random.int} 或 ${random.uuid} 可以生成相应的随机值
自定义配置源:如果项目中引入了自定义的配置源(如自定义的 PropertySource 实现或第三方配置库),这些源中的属性也可能通过 ${} 引用来访问