YAML 是YAML不是一种标记语言的外语缩写,中文是另一种标记语言,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
YAML 中可以允许表示三种格式,分别是常量值,对象和数组。它的语法结构是 key: value
(注意,冒号后面必须有一个空格)。
name: 李某某
flag: true
num: 56
字符串不用加引号,如果加双引号不会把转义的符号给输出,单引号则相反,例如,
name: "李\n某" 输出 :
李
某
-----------------------------
name: '李\n某' 输出 :
李\n某
pets:
- dog
- cat
- pig
# 或者
pets: [dog,cat,pig]
# 冒号和 - 后面的空格不能少
students:
name: 李某某
age: 18
sex: 男
# 或者
students: {name: 李某某,age: 18,sex: 男}
SpringBoot 默认的配置文件是 properties 而,我们可以使用 yml 来实现配置文件的功能(更好用)。
在此之前我们需要导入配置文件处理器的依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
创建一个实体类 Person,然后编写 yml 配置文件
person:
name: 李某某
age: 18
sex: 男
birthday: 2000/05/06
hobby: [code,girl,music]
dog: {name: 旺财,age: 2}
实体类 Person
package com.lxc.springboot.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import java.util.Date;
import java.util.List;
@Component//注册 bean
@ConfigurationProperties(prefix = "person")
@Validated//数据校验
public class Person {
private String name;
private int age;
private String sex;
private Date birthday;
private List hobby;
private Dog dog;
public Person() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public List getHobby() {
return hobby;
}
public void setHobby(List hobby) {
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", birthday=" + birthday +
", hobby=" + hobby +
", dog=" + dog +
'}';
}
}
其中注解@ConfigurationProperties
的作用是
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
参数 prefix = “person” : 将配置文件中的 person 下面的所有属性一一对应
@component
(把普通pojo实例化到spring容器中,相当于配置文件中的
)
Dog 类
package com.lxc.springboot.pojo;
public class Dog {
private String name;
private int age;
public Dog() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
然后在生成的测试类中进行测试
package com.lxc.springboot;
import com.lxc.springboot.pojo.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Autowired //它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
运行结果
我们的类和配置文件直接关联着 , 我们使用的是@configurationProperties
的方式,还有一种方式是使用@value
而@value使用起来则有点繁琐,因为我们需要为每个属性都加上一个注解
public class Person {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private int age;
@Value("${person.sex}")
private String sex;
...
}
对比如下:
其中数据校验就是为实体类加上一个注解@Validated
,然后就可以为该类的属性做一个校验,如我们把 name 的上面设置为 @Email
然后我们再看运行结果中的一部分报错
这样就可以保证数据的正确性。