SpringBoot-yaml配置注入-03
yaml语法学习
application.yaml
- 语法结构: key:空格 value
可以修改springboot的默认配置,尝试修改toncat默认启动端口号
server:
port: 8081
1. yaml的概述
以数据作为中心,而不是标记语言为重点!
语法要求严格!
- 空格不能省略
- 以缩进来控制层级关系,只要是左对齐的一列数据都是同一层级
- 属性和值的大小写都是十分敏感
2. 对象、Map
#对象、Map格式
k:
v1:
v2:
在下一行写对象和属性和值的关系,注意缩进
student:
name: sli
age: 18
行内写法
student: {name: qinjiang,age: 3}
数组(List、set)
用-值表示数组中的一个元素,例如
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
修改默认的端口号
server:
port: 8089
3. 注入配置文件
yaml最强大的地方在于可以注入配置文件
- 在springboot项目中的resources目录新建一个文件application.yml
- 编写一个实体类Dog
package com.sli.springboot.pojo;
@Component //注册bean到容器中
public class Dog {
private String name;
private Integer age;
//有参、无参构造、get、set方法、toString()方法
}
- 再编入一个Person类
@Component //注册bean到容器中
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//有参、无参构造、get、set方法、toString()方法
}
- yaml注入(编写一个yaml)配置
person:
name: sli
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
- 已经把person这个对象所有的值写好了,现在注入到我们的类中
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
- 会报一个错误,需要在pom.xml中引入以下的配置
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 去测试类中测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
private Person person; //将person自动注入进来
@Test
public void contextLoads() {
System.out.println(person); //打印person信息
}
}
- 输出的值全部注入成功!
对比@ConfigurationProperties 和 @Value
yaml注入和properties
- @ConfigurationProperties只需要写一次即可,@Value则需要在每个属性上都添加
- 松散绑定:在yaml中写的是last—name,这个和lastName是一样的,-后面跟的字母默认是大写的
- JSR303数据校验,这个就是我们可在字段增加一层过滤验证,可以保证数据的合法性
- 复杂类型的封装,yaml中可以封装对象
结论
推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

浙公网安备 33010602011771号