写在前面的话
springboot在运行时通过读取核心配置文件的方式解决了spring要配置大量繁杂的配置文件
但是有一个问题
properties的配置文件写法有点复杂 不能直观的看明白配置的内容是什么
yml(也可以写成yaml)文件解决了这个问题
在本文中我们通过一个简单的案例来嗦一下这个是yml怎么使用
关于这三种文件的顺序如下
在加载顺序上:yml>yaml>properties;
在相同属性配置上 yml<yaml<properties,也不难理解,后加载的会覆盖先加载的同属性。
Person类 中使用了Pet类
@Data
@ToString
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
}
Pet类
@Data
@ToString
public class Pet {
private String name;
private Double weight;
}
yml文件
person:
#private String userName;
userName: 'zhangsan \n'
# 双引号不会转义 但单引号能转义 单引号会将\n作为字符串输出 双引号会将\n作为换行输出
#private Boolean boss;
boss: false
#private Date birth;
birth: 2019/12/12 20:12:33
#private Integer age;
age: 18
# private Pet pet;
pet:
name: tomcat
weight: 23.4
# private String[] interests;
interests: [篮球,游泳]
#private List<String> animal;
animal:
- jerry
- mario
# private Map<String, Object> score;
score:
english:
first: 30
second: 40
third: 50
math: [131,140,148]
chinese: {
first: 128,second: 136}
# private Set<Double> salarys;
salarys: [3999,4999.98,5999.99]
# private Map<String, List<Pet>> allPets;
allPets:
sick:
- {
name: tom}
- {
name: jerry,weight: 47}
- name: pig
weight: 110
health: [{
name: mario,weight: 47}]
yml 到底应该咋使用
- yml写key: value的时候一定要主要key: 后面要加一个空格才能使value生效
- yml是通过缩进来确定包含关系的
- 如果是普通的对象 如 private Date birth这种的话我们的注入方式是下面这种直接写在后面就行了
birth: 2019/12/12 20:12:33
- 如果对象里面有变量的话 如private Pet pet;这种 pet里面有name 和weight我们使用的注入方法如下
pet:
name: tomcat
weight: 23.4
- 如果是数组类型的话(即有[ ]) 如private String[] interests;我们用[ , , , ]的形式
interests: [篮球,游泳]
- 如果是集合的话如 List< String > animal 我们的注入方法如下
animal:
- jerry
- mario
- 如果我们的集合有key value关系的话我们也可以按照对象的方式注入如private Map<String, Object> score;
score:
english:
first: 30
second: 40
third: 50
math: [131,140,148]
chinese: {
first: 128,second: 136}
- 其实如果是集合的话也可以用 [ , , , ]这样注入的 比如private Set salarys
salarys: [3999,4999.98,5999.99]
- 如果集合里面带集合咋办? 比如 Map<String, List> allPets
allPets:
sick:
- {
name: tom}
- {
name: jerry,weight: 47}
- name: pig
weight: 110
health: [{
name: mario,weight: 47}]
总结
由上可知 yml 有一下几种
- 对象关系 用 key: value 如果一个对象里面有好几个属性的话
key:
key1: value1
key2: value2
当然这也可以写成一行 key: {key1: value1,key2: value2 } - 数组、list、set 用 -来表示数组中的一个元素就像这样
当然数组的也可以写到一行里面
pets: [dog,pig,cat]
- 如果有很多的嵌套关系的话可以通过缩进来解决
就跟这种一样