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