yaml简介
Java本身为我们提供了properties格式配置文件的支持,我们在log4j等配置时也经常的使用。但是properties文件本身只支持key-value格式的存储,对于复杂需求比较难实现。因此在需求较为复杂的情况下,我们通常都是使用xml进行存储,但是xml语言解析起来比较麻烦,语法也比较的复杂,使用起来很不友好。为了解决以上问题,SpringBoot将yaml作为配置文件的首选。
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。
yaml基本的语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
- 在使用的时候不需要添加
""
或者''
,但是如果有特殊需求也可以添加:- 添加
""
,如果文本中含有转义字符,且不希望进行转义,可以使用,如:"张\n"
- 添加
''
,如果文本中含有转义字符,且希望其进行转义,可以使用
- 添加
数据类型
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
使用yaml表示Java对象
对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
也可以使用 key:{key1: value1, key2: value2, …}。
student:
name: lisi
sex: 男
age: 16
list(数组)表示方式
以 -
开头的行表示构成一个数组:
lists:
- 11
- 12
- 13
YAML 支持多维数组,可以使用行内表示:
lists: [1,2,3,4]
map表示方式
map: {name: zhangsn,sex: man}
使用占位符
username: root${random.int}
password: 8778218${spring.datasource.username}
可以使用随机数,也可以引用上文中的值
综合案例
student:
name: 张万
sex: 男
age: 16
lists:
- 11
- 12
- 13
map: {name: zhangsn,sex: man}
people: {name: zhang,sex: man,lists: [1,2,3,4],map: {name: 123,sex: man}}
SpringBoot中使用yaml配置文件
@ConfigurationProperties(prefix = "student")
在需要引入yaml配置文件的类上方添加上述注解即可,prefix的值为yaml文件中配置的相应的对象。
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
private String sex;
private Integer age;
private List<Integer> lists;
private Map<String,Object> map;
}
要导入配置文件还可以使用
@PropertySource("classpath:application.yaml")
的形式。这种形式可以添加任意位置的配置文件
多环境配置
在实际开发过程中,我们可能会在多个环境下进行开发,因此我们需要进行多环境配置,yaml对多环境配置有良好的支持。
spring:
profiles:
active: dev
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
使用---
来进行分割多个配置环境。