【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

时间:2022-12-02 07:12:35

一.yaml详细讲解

1.1 什么是yaml?

YAML是一种数据序列化语言,通常用于编写配置文件。业界对YAML有不同的看法。有些人会说YAML代表另一种标记语言。其他人认为“YAML不是标记语言”(“YAML并非标记语言”)。“YAML”只是这句话的递归缩写,强调YAML用于数据而不是文档。

1.2 新建yaml文件

到resource文件夹下,新建application.yaml。文件如下:

【SpringBoot】对于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.去测试集里,测试是否成功:

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

5.引入类。

@Autowired
private com.zhu.springbootdemo.pojo.caipig caipig;

6.运行,观察输出。

@Test
void contextLoads() {
    System.out.println(caipig);
}

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

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.去测试集里,测试是否成功:

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

这里引入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.运行,观察输出。

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

这里已经输出成功了,因为中文的编码有点问题,所以输出????

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}}

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

这样就比较灵活。

三.小结

总结:

1.@ConfigurationProperties作用:

将配置文件中配置的每一个属性值,映射到这个组件中。告诉springboot将本类中的所有属性和配置文件中的相关配置进行绑定

2.@Component作用:

@component是spring中的一个注解,它的作用就是实现bean的注入,@component取代。

3.@PropertySource作用:

@PropertySource 和 @Value组合使用,可以将自定义属性文件中的属性变量值注入到当前类的使用@Value注解的成员变量中。