前言
yaml是一种以数据为中心的文件格式。相比于传统的json、xml格式的文件,它能够以更简洁的语法来记录数据。
基本用法
- yaml文件最基本的格式是键值对,即key: value。注意冒号和value直接必须有一个空格隔开。
- yaml的键值对是可以嵌套的,即value也可以是一个键值对
用法展示
- 最简单的键值对
在yaml中普通字符串无需使用引号包裹。如果使用""包裹字符串,则串内支持转义;而使用’'包裹字符串,则不支持转义,所有字符将被当作普通字符
userName: root
- 嵌套的键值对
yaml用空格缩进来控制层次(不允许使用tab键缩进),类似python
server:
address: /
port: 8000
- 嵌套的键值对的行内写法
server: {address: /, port: 8000}
- value是数组形式的写法
有时候我们的值(value)并不止一个,需要写成数组,可以这样写:
每一项之前加上 - 且需要用空格隔开,并保持相同的缩进
dogs:
- dog1
- dog2
- dog3
- 数组形式的行内写法
dogs: [dog1, dog2, dog3]
至此,yaml基本语法格式介绍完毕,下面将介绍如何在spring Boot中用注解读取yaml配置文件中的值,并将其封装到bean中
@ConfigurationProperties
使用该注解需要引入一个配置文件解析器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
下面结合一个简单的例子讲解基本用法
需求
现有一个名为Person的bean
public class Person {
public String name;
public Boolean Man;
public Map<String, Object> mapTest;
public List<String> listTest;
//... ... 省略getter、setter
}
需要从配置文件中读取数据并封装到上述类中
那么配置文件可以这样写:
person:
name: 李华
Man: true
mapTest:
key1: value1
key2: value2
listTest:
- list1
- list2
- list3
我们可以在Person类上标注@ConfigurationProperties(“person”), 再标注@Component将bean注入容器,计科将对应属性封装进Person组件
@ConfigurationProperties注解源码:
public @interface ConfigurationProperties {
@AliasFor("prefix")
String value() default "";
@AliasFor("value")
String prefix() default "";
boolean ignoreInvalidFields() default false;
boolean ignoreUnknownFields() default true;
}
它的value和prefix属性用于指定前缀,springBoot会读取前缀对应的value
**坑点:**从配置文件中读取自定义属性时,属性名不能以is开头,否则无法读取!