一.yaml详细讲解
1.1 什么是yaml?
YAML是一种数据序列化语言,通常用于编写配置文件。业界对YAML有不同的看法。有些人会说YAML代表另一种标记语言。其他人认为“YAML不是标记语言”(“YAML并非标记语言”)。“YAML”只是这句话的递归缩写,强调YAML用于数据而不是文档。
1.2 新建yaml文件
到resource文件夹下,新建application.yaml。文件如下:
1.3 SpringBoot的配置文件
SpringBoot的全局配置,只有俩种:
1.要么是application.properties:
- 语法结构:key=value
2、要么是application.yaml:
- 语法结构:key:空格 value
意义、作用:修改SpringBoot自动配置的默认值。
1.4 xml和yaml
标记语言:
xml配置:
<server>
<prot>8080</prot>
</server>
yaml配置:
server:
port: 8080
很明显,yaml更加的轻巧一点。
1.5 使用
举一个简单的例子:来突出键值对的特点。
yaml文件如下:
neme: 上进小菜猪
原配置properties文件如下:
neme=上进小菜猪
1.5.1 yaml对象的使用
yaml定义一个对象为people,然后就可以在里面定义。
people:
neme: 上进小菜猪
age: 20
当然我们的原配置properties文件也可以实现,如下:
people.neme="上进小菜猪"
people.age=20
SpringBoot推荐使用yaml。
1.5.2 行内的写法
yaml支持数组,我们普通写法如下:
num:
- cat
- dot
- pig
当然我们可以采用行内的写法:
pets: [cat,dog,pig]
上面的对象也可以写到行内的写法:
people: {name:"上进小菜猪",age:20}
注意:
properties只能存键值对,不能存其他的。
yaml对空格的要求非常的严格。
强大之处:可以注入到我们的配置当中。
二.属性赋值
2.1 原生赋值
@Component
@component是spring中的一个注解,它的作用就是实现bean的注入。
1.新建一个类对象:caipig
private String name;
private Integer age;
然后写有参无参,getter和setter方法以及tospring。
2.新建对象类:Person
private String name;
private Integer age;
private Date birth;
private Boolean happy;
private Map<String, Object> maps;
private caipig pig;
然后写有参无参,getter和setter方法以及tospring。
3.给caipig赋值:
@Value("小菜猪")
private String name;
@Value("2")
private Integer age;
4.去测试集里,测试是否成功:
5.引入类。
@Autowired
private com.zhu.springbootdemo.pojo.caipig caipig;
6.运行,观察输出。
@Test
void contextLoads() {
System.out.println(caipig);
}
2.2 使用yaml
1.在一.yaml详解里,我们新建了一个固定名字的yaml。现在我们到里面进行赋值。
person:
name: 上进小菜猪
age: 20
birth: 2022/11/29
happy: false
maps: {a:a1,b:b1}
pig:
name: 菜猪
age: 3
2.在Person对象类加入ConfigurationProperties。
@ConfigurationProperties作用:将配置文件中配置的每一个属性值,映射到这个组件中。告诉springboot将本类中的所有属性和配置文件中的相关配置进行绑定
@ConfigurationProperties(prefix = "person")
3.去测试集里,测试是否成功:
这里引入ConfigurationProperties会爆红,但是他并不影响我们的代码的运行。这个爆红是可以改的。稍后我会在博客里写他的解决方案。
2.3 使用properties
1.将上面的@ConfigurationProperties注释掉
//@ConfigurationProperties(prefix = "person")
2.可以在application.properties或者你自己新建一个properties,比如,我的文件名为zhubo.properties
name=上进小菜猪
3.加载指定的配置文件
@PropertySource(value = "classpath:zhubo.properties")
@PropertySource 和 @Value组合使用
给其赋值:
@Value("${name}")
private String name;
4.运行,观察输出。
这里已经输出成功了,因为中文的编码有点问题,所以输出????
2.4 扩展,yaml使用EL表达式
我们可以随意灵活的在yaml里使用EL表达式,如下,我们可以弄一个uuid。随机数,占位符等等。
person:
name: 上进小菜猪${random.uuid}
age: ${random.int}
birth: 2022/11/29
happy: false
maps: {a:a1,b:b1}
pig:
name: ${person.null:hello}_菜猪
age: 3
重新跑一下:
Person{name='上进小菜猪7e555d13-1da0-46a1-91b2-c1ac1ec9c4c7', age=1628943677, birth=Tue Nov 29 00:00:00 CST 2022, happy=false, maps={aa1=, bb1=}, pig=caipig{name='hello_菜猪', age=3}}
这样就比较灵活。
三.小结
总结:
1.@ConfigurationProperties作用:
将配置文件中配置的每一个属性值,映射到这个组件中。告诉springboot将本类中的所有属性和配置文件中的相关配置进行绑定
2.@Component作用:
@component是spring中的一个注解,它的作用就是实现bean的注入,@component取代。
3.@PropertySource作用:
@PropertySource 和 @Value组合使用,可以将自定义属性文件中的属性变量值注入到当前类的使用@Value注解的成员变量中。