一、Springboot 配置文件简介
Springboot 是基于配置进行管理的,由于 Springboot 底层都帮我们配置好了相关的模块,如果我们需要修改自动配置的默认行为该怎么办呢?这个时候我们就需要通过修改Springboot 的配置文件来实现了,Springboot 的默认的全局配置文件有两种,一种是 application.properties ,另外一种是 application.yml(或者application.yaml).这里,我们就简单说一下 Yaml 的简单实用
二、Yaml 的特点及语法
Yaml 是一种以数据为中心的配置文件,里面的配置基本都是数据,很少有类似于 xml 的开、闭标签等无关数据的配置,所以它比 Json、Xml 更适合做配置文件
Yaml 语法格式如下
key:(空格)value
Yaml 是以空格的缩进来控制层级关系的,只要是左对齐的一列数据,代表的是同一层级的.其中 key 和 value 对大小写敏感.例如 server 下的 port 和 path 就是同一层级的数据
server:
port:8081
path:/hello
三、Yaml 的值的写法
1、字面量:普通的值(数字、字符串、布尔值)
字符串默认是不用加上单引号或者是双引号的,如果要加上的话,单引号和双引号还是有一点区别的
单引号:例如 name:'xiaomaomao hello' 它是不会进行转义的,最终输出的结果就是 xiaomaomao hello
双引号:例如 name:"xiaomaomao hello" 它会进行转义,最终输出的结果就是 xiaomaomao 换行 hello
name: xiaomaomao
age: 21
height: 157.00
2、数组
// 基本写法,代表数组 hobby 中有三个元素 LOL、KFC、COFFE
hobby:
- LOL
- KFC
- COFFE
// 行内写法
hobby: [LOL,KFC,COFFE]
3、对象和 Map 集合
// 一般写法
name: Husky
age: 2
color: gray
// 行内写法
{name: Husky,age: 2,color: gray}
4、list 集合
// 一般写法
pets:
-
name: Husky
age: 2
color: gray
-
name: persian
age: 3
color: orange
// 行内写法
pets:
- {name: Husky,age: 2,color: gray}
- {name: persian,age: 3,color: orange}
四、案例
1、配置文件 resources/config/application.yaml
person:
name: xiaomaomao
age: 21
height: 157.00
hobby:
- LOL
- KFC
- COFFE
pets:
-
name: Husky
age: 2
color: gray
-
name: persian
age: 3
color: orange
featureLevel:
clever: 10
lovely: 8
funny: 8
2、实体类 Person
@Configuration
// 将 person 下级的 key 与实体类中的属性进行映射绑定,并为其注入属性值
@ConfigurationProperties(prefix = "person")
// 加载指定位置的 properties 配置文件
@PropertySource("classpath:config/application.yaml")
// 该类省略了 set/get 方法
public class Person {
// 基本数据类型的属性
private String name;
private Integer age;
private double height;
// 数组
private String[] hobby;
// List 集合
private List<Pet> pets;
// Map 集合
private Map<String, String> featureLevel;
}
3、实体类 Pet (省略 get/set/toString)
public class Pet {
private String name;
private String age;
private String color;
}
4、测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot01ApplicationTests {
@Autowired
private ApplicationContext ioc;
@Test
public void testProperties() {
Person person = ioc.getBean("person", Person.class);
System.out.println(person);
}
}
5、测试结果
Person{
name='xiaomaomao',
age=21,
height=157.0,
hobby=[LOL, KFC, COFFE],
pets=[
Pet{name='Husky', age='2', color='gray'},
Pet{name='persian', age='3', color='orange'}
],
featureLevel={clever=10, lovely=8, funny=8}
}