配置文件 -- yaml配置注入

狂神说:

https://mp.weixin.qq.com/s__biz=Mzg2NTAzMTExNg==&mid=2247483744&idx=1&sn=b4ec762e71b2ddf9403c035635299206&scene=19#wechat_redirect

1. 配置文件

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的application,配置文件可以有两种格式

  • application.properties
    语法结构 :key=value

  • application.yml
    语法结构 :key:空格 value

配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
比如我们可以在配置文件中修改Tomcat 默认启动的端口号!

server.port=8081

2. yaml概述

YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)

这种语言以数据作为中心,而不是以标记语言为重点!

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml

  • 传统xml配置:

    <server>
        <port>8081<port>
    </server>
    
  • yaml配置:

    server:
      prot: 8080
    

3. yaml基础语法

说明: 语法要求严格!

  1. 空格不能省略

  2. 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

  3. 属性和值的大小写都是十分敏感的。

语法:

字面量:普通的值 [ 数字,布尔值,字符串 ]

字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;

k: v

注意:
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: “kuang \n shen” 输出 :kuang 换行 shen
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen

对象、Map(键值对)

#对象、Map格式
k: 
    v1:
    v2:

在下一行来写对象的属性和值得关系,注意缩进;比如:

student:
    name: qinjiang
    age: 3

行内写法

student: {
    
    name: qinjiang,age: 3}

数组( List、set )

用 - 值表示数组中的一个元素,比如:

pets:
 - cat
 - dog
 - pig

行内写法

pets: [cat,dog,pig]

修改SpringBoot的默认端口号

配置文件中添加,端口号的参数,就可以切换端口;

server:
  port: 8082

4. yaml注入 – 给实体类注入匹配值

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

  1. 在springboot项目中的resources目录下新建一个文件 application.yml

  2. 编写一个实体类 Dog;

    package com.kuang.springboot.pojo;
    
    @Component  //注册bean到容器中
    public class Dog {
          
          
        private String name;
        private Integer age;
     
        //有参无参构造、get、set方法、toString()方法  
    }
    
  3. 在编写一个复杂一点的实体类:Person 类,包含dog

    @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()方法  
    }
    
  4. 编写一个yaml配置!注意缩进和大小写

    person:
      name: qinjiang
      age: 3
      happy: false
      birth: 2000/01/01
      maps: {
          
          k1: v1,k2: v2}
      lists:
       - code
       - girl
       - music
      dog:
        name: 旺财
        age: 1
    
  5. 注入到类中!
    @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;
    }
    
  6. IDEA会提示,springboot配置注解处理器没有找到,所以引入对应jar包

    <!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    
  7. 以上配置就完成了,可以进行测试,输出Person

    @SpringBootTest
    class DemoApplicationTests {
          
          
    
        @Autowired
        Person person; //将person自动注入进来
    
        @Test
        public void contextLoads() {
          
          
            System.out.println(person); //打印person信息
        }
    
    }
    

配置文件占位符

配置文件还可以编写占位符生成随机数

person:
    name: qinjiang${
    
    random.uuid} # 随机uuid
    age: ${
    
    random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {
    
    k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${
    
    person.hello:other}_旺财
      age: 1

猜你喜欢

转载自blog.csdn.net/qq_44058265/article/details/120584638