SpringBoot-yaml配置注入-03

yaml语法学习

application.yaml

  • 语法结构: key:空格 value
    可以修改springboot的默认配置,尝试修改toncat默认启动端口号
server:
	port: 8081

1. yaml的概述

以数据作为中心,而不是标记语言为重点!
语法要求严格!

  1. 空格不能省略
  2. 以缩进来控制层级关系,只要是左对齐的一列数据都是同一层级
  3. 属性和值的大小写都是十分敏感

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最强大的地方在于可以注入配置文件

  1. 在springboot项目中的resources目录新建一个文件application.yml
  2. 编写一个实体类Dog
package com.sli.springboot.pojo;

@Component  //注册bean到容器中
public class Dog {
    private String name;
    private Integer age;

    //有参、无参构造、get、set方法、toString()方法
}
  1. 再编入一个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()方法  
}
  1. 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
  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;
}
  1. 会报一个错误,需要在pom.xml中引入以下的配置
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
  1. 去测试类中测试
@SpringBootTest
class DemoApplicationTests {
    @Autowired
    private Person person; //将person自动注入进来
    @Test
    public void contextLoads() {
        System.out.println(person); //打印person信息
    }
}
  1. 输出的值全部注入成功!

对比@ConfigurationProperties 和 @Value
yaml注入和properties

  1. @ConfigurationProperties只需要写一次即可,@Value则需要在每个属性上都添加
  2. 松散绑定:在yaml中写的是last—name,这个和lastName是一样的,-后面跟的字母默认是大写的
  3. JSR303数据校验,这个就是我们可在字段增加一层过滤验证,可以保证数据的合法性
  4. 复杂类型的封装,yaml中可以封装对象
    结论
    推荐 yml;
    如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
    如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
posted @ 2021-09-25 07:59  1_f  阅读(40)  评论(0)    收藏  举报