一. 语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,例如:
server: port: 8080 path: /hello
二. 值的写法
1.字面量:普通值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
eg:name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
eg:name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.对象,Map(属性和值)(键值对)
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
person: name: xuy age: 26
或者用行内写法:
person: {name: xuy,age: 26}
3.数组(List,Set)
用- 值表示数组中的一个元素
pets: - cat - dog - pig
或者用行内写法:
pet: [cat, dog, pig]
三. 案例
1.pom.xml中导入配置文件处理器项目
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
2.创建两个bean:Person与Pet类
/** * 将配置文件中的每一个属性的值绑定到这个类的对应属性 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定。 * prefix = "person" : 告诉配置文件中哪个下面的所有属性进行映射 * @Component:只有这个组件是容器中的组件,才能提供@ConfigurationProperties功能 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Pet pet; 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 Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", pet=" + pet + '}'; } }
public class Pet { 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 "Pet{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
3.编写yml配置文件
person: name: xuy age: 12 birth: 1993/12/29 maps: k1: v1 k2: xx lists: [11,22] pet: name: aa age: 2
4.编写测试类
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootDemoApplicationTests { @Autowired private Person person; @Test public void contextLoads() { System.out.println(person); } }
5.运行查看打印
PS:也可以用properties配置文件方式:
person.name=xuy person.age=18 person.birth=1993/12/29 person.maps.k1=v1 person.maps.k2=12 person.lists=a,b,c person.pet.name=dog person.pet.age=1
运行结果一样: