目录
前言
平时我们springboot项目经常采用的是yml配置文件,我用了一段时间以后,突然发现我对于YML的文件各种使用不是那么的了解。所以今天就写了这篇文章来具体说明一下我目前对yml文件配置的了解,用以记录一下。当然随着对YML的了解更多,这篇文章也会继续跟着修改的。
YML的定义
首先,我们看看YML的定义。YML(YAML):YAML Ain't Markup Language。它明确表明YML不是标记语言。它有很好的数据结构,方便程序员来阅读。
YML(YAML)的语法介绍
基本语法
我们首先先来看一个典型的json数据,然后我们通过YML来实现。通过这样的方式让我们了解YML的语法。
我们要描述一个用户。用户有姓名,年龄。联系方式是一个bean,然后爱好是一个list,朋友是一个list bean的形式。json格式如下:
{
"user-name": "zhangsan",
"age": 18,
"contact": {
"mobile": "11111111111",
"email": "a@a.com"
},
"hobbies": [
"football", "basketball"
],
"friends": [{
"friend-name": "lisi",
"gender": "male"
},
{
"friend-name": "wangwu",
"gender": "femle"
}
]
}
那么我们专为YML的话,是如下表示:
user:
user-name: zhangsan
age: 18
contact:
mobile: 11111111111
email: a@a.com
hobby:
- football
- basketball
friends:
- friend-name: lisi
gender: male
- firend-name: wangwu
gender: female
YML的语法,“:”后面一定要有一个空格,然后下一级的属性前面要有两个空格,而且同级别必须对其。
ren然后friends的内部属性,还有另一个写法。
friend:
- {friend-name: lisi, gender: male}
- {friend-name: wangwu, gender: female}
转译字符
如下图查看转译字符的作用
关于key的名称
在springboot中,friend-name = friendName = friend_name。关于这一点,我早起用springboot项目的时候我不知道yml是这样的,造成我看很多文档配置yml的属性的时候,发现配置有的带“-”,有的是驼峰显示,闹的我都没明白怎么写才对。-_-||
关于占位符
springboot配置文件的时候,我们经常会因为运行环境的不同,造成参数不同。我们可以通过yml文件的占位符来改变配置的内容。比如:user-name: ${other.name}。然后我们还可以这么写:user-name: ${other.name:zhangsan},通过“:”后面给一个默认值。代表如果other.name属性没有,则默认给zhangsan。
yml还有一个random的随机数的占位符。我这里只举几个简单的例子。
比如:age: ${random.int} ,这种写法就是给年龄一个随机整数。
其他random的使用:
${random.uuid} : 获取一个uuid
${random.long}:获取一个长整型随机数
${random.int(100)}:获取一个100以内的随机整数
${random.int(50,100)}:获取一个50到100以内的随机整数
springboot使用yml变量
@Value使用
@Component
@Data
public class User{
@Value("${user.user-name}")
private String userName;
}
@ConfigurationProperties使用
@Data
@Component
@ConfigurationProperties(prefix="user")
public class User{
private String userName;
private int age;
private String[] hobbies;
private Contact contact;
private Friend[] friends;
}
@Data
public class Contact{
private String mobile;
private String email;
}
@Data
public class Friend{
private String friendName;
private String gender;
}
描述 | @Value | @ConfigurationProperties |
功能 | 单一制定注入 | 批量注入一个java的bean |
语法绑定 | 不支持松散语法 | 支持松散语法 |
对象与数组 | 不支持 | 支持 |
SpEL | 支持 | 不支持 |