YAML是什么
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式,常用语作配置文件。
它的基本语法规则如下。
- 大小写敏感
 - 使用缩进表示层级关系
 - 缩进时不允许使用Tab键,只允许使用空格。
 - 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
 
表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML基本用法
字符串
字符串是最常见,也是最复杂的一种数据类型。
字符串默认不使用引号表示。
hello: 你好
双引号:不会转义特殊字符:
name: "test \n test2"输出:testtest2
单引号:会转义特殊字符
name:'test \n test2'输出:test \n test2
其他基本类型
- 字符串
 - 布尔值
 - 整数
 - 浮点数
 - Null
 - 时间
 - 日期
 
直接使用字面量表示。
对象(两种方式)
user:username: 张三password: 123456
或写成行内对象
user: { username: 张三, password: 123456}
数组
一组连词线开头的行,构成一个数组。
user- zhangsan- lisi- wangwu
Map
map:k1: v1k2: v2map2: {k1:v1, k2:v2}对应对象:private Map<String,Object> map;private Map<String,String> map2;
复合结构
languages:- Ruby- Perl- Pythonwebsites:YAML: yaml.orgRuby: ruby-lang.orgPython: python.orgPerl: use.perl.org
SpringBoot配置
默认支持两种类型:
- application.properties
 - application.yml
 
SpringBoot会把YAML解析为properties文件,如下列yaml配置:
environments:dev:url: https://dev.example.comname: Developer Setupprod:url: https://another.example.comname: My Cool App
会被转换为:
environments.dev.url=https://dev.example.comenvironments.dev.name=Developer Setupenvironments.prod.url=https://another.example.comenvironments.prod.name=My Cool App
测试一下
application.yml文件内容:
user:userName: rootisAdmin: trueregTime: 2019/11/01isOnline: 1maps: {k1 : v1,k2: v2}lists:- list1- list2address:tel: 15899988899name: 上海市test:text1: "test1 with \n over"text2: 'test2 \n over'map:k1: v1k2: v2map2: {k1:v1, k2:v2}
User测试类:
@Component@ConfigurationProperties("user")@Datapublic class User {private String userName;private boolean isAdmin;private Date regTime;private Long isOnline;private Map<String,Object> maps;private List<Object> lists;private Address address;}
测试类:
@SpringBootTest@RunWith(SpringRunner.class)public class SpringbootDemoApplicationTests {@Autowiredprivate User user;@Autowiredprivate TestProp tp;@Testpublic void contextLoads() {System.out.println(user);System.out.println(tp);}}
单个yml中编写多个配置(Multi-profile YAML Documents)
在一个yml文件中,通过 --- 分隔多个不同配置,根据spring.profiles.active 的值来决定启用哪个配置,例如:
server:address: 192.168.1.100---spring:profiles: developmentserver:address: 127.0.0.1---spring:profiles: production & eu-centralserver:address: 192.168.1.120
默认的server.address=192.168.100, 如果profile指定为development,那么server.address为127.0.0.1
如果profile指定为production and eu-central,那么server.address为192.168.1.120
再比如:
#公共配置spring:profiles:active: pro #使用名为pro的配置,这里可以切换成devdatasource:url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=truepassword: 123456username: root---#开发环境配置spring:profiles: dev #profiles属性代表配置的名称server:port: 8080---#生产环境配置spring:profiles: proserver:port: 80
编写多个yml文件,分别代表不同的配置(Multiple YAML Documents)
将配置编写在多个yml文件中,根据spring.profiles.active 的值来决定启用哪个配置。
配置文件规则如下:
- 文件命名需要符合application-{profile}.yml的格式,如:application-dev.yml
 - 通用配置写到application.yml中,不同的环境配置写到不同的yml文件中
 
例如:
application.yml
#公共配置spring:profiles:active: pro #使用名为pro的配置,这里可以切换成devdatasource:url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=truepassword: 123456username: root
application-dev.yml
server:port: 8080
application-pro.yml
server:port: 80
官方建议
- 两种配置方式根据团队规范而定,但如果配置很多,建议拆成多个yml文件,即方式二,便于维护
 - 注意区分二者的不同,不能混用
 
JVM启动
``` -Dspring.profiles.active=test,master — 可指定多个
—spring.profiles.active=dev
```
