SpringBoot配置文件之yml的基本语法与案例
一.yml语法
yml比json,xml更加适合配置文件,以数据为中心,减少了没必要的标签。
1.yml的基本格式:
key: value
例如: name: lisi(**注意:**key:与value之间的空格是必须要有的)
2.以空格的缩进来控制层级关系,只要是左对齐的一列数据都属于同一层级。例如
person:
name: lisi
age: 20
以上例子中name和age属于同一个层级,都是person的属性
3.属性和值对大小写都敏感。
二、不同属性类型值的写法
1.字面量(数字、字符串、bool等)
直接就是key: value,其中字符串若加上单引号则不会转义特殊字符,若加上双引号则会转义特殊字符,不加引号也不会转义。
2.对象、map
a.分层写法:
例如:
person:
name: zhangsan
age: 20
b.行内写法
例如:
map: {key1: v1,key2: v2}
3.数组(list,set)
a.分层写法
使用-表示一个元素
例如:
hobby:
- play
- listen
注意:-与值之间也必须有空格
b.行内写法
hobby: [play,listen]
三、案例:SpringBoot如何使用yml配置文件给对象赋值
1.在pom文件中添加配置处理的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.创建Person类和Dog类
在Person类中加上注解@Component将Person交给容器,再加上注解@ConfigurationProperties(prefix = “person”),这样SpringBoot就会去配置文件中找到以person为开头之后的属性值赋给Person中的属性。其中,Person和Dog类的代码如下:
Person.java
package com.ldx.springbootconfigyml.domain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Date birth;
private String[] hobby;
private Map<String,Object> map;
private Dog dog;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", birth=" + birth +
", hobby=" + Arrays.toString(hobby) +
", map=" + map +
", dog=" + dog +
'}';
}
}
Dog.java
package com.ldx.springbootconfigyml.domain;
public class Dog {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3.编写application.yml配置文件
server:
port: 8081
person:
name: zhangsan
age: 20
birth: 2017/12/12
hobby: [play,listen]
map: {key1: v1,key2: v2}
dog:
name: xiaogou
age: 2
4.编写测试单元
package com.ldx.springbootconfigyml;
import com.ldx.springbootconfigyml.domain.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootConfigYmlApplicationTests {
@Autowired
Person p;
@Test
void contextLoads() {
System.out.println(p.toString());
}
}
5.结果