SringBoot之yaml语法
阅读原文时间:2022年03月31日阅读:1

------------恢复内容开始------------

SpringBoot之yaml语法

官方配置文档太多了,根本记不住!

怎么办呐-->了解原理

SpringBoot使用了一个全局配置文件,且配置文件的名称是固定的:

  • application.properties

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

    • 语法结构:key: 空格 value

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。(来自于百度百科词条解释)

YAML和XML的区别(以配置端口号为例):

YAML配置:

server:
  address: 8081

XML配置 :

<server>
    <port>8081<port>
<server>

2.1、YAML语法

基础语法--> key:value

#普通的key value键值对
name: liberty

#对象
student:
  name: liberty
  age: 20

#对象的行内写法
student: {name: liberty,age: 20}

#数组
pets:
  - dog
  - cat
  - pig

#数组的行内写法
pets: [dog,cat,pig]

注意:yaml中对于空格的要求极其严格

student:
  name: liberty
   age:20
(age前面加一个空格的话相当于age是name下面的属性)

student:
name: liberty
age: 20
(这样相当于三个对象)

2.2、注入配置文件

程序实现

2.2.1、将默认的application.properties后缀改为yaml

2.2.2、根据提示打开文档导入配置文件处理器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

2.2.3、编写yaml配置文件

2.2.4、在SpringBoot的主程序的同级目录下建包(必须这样,约定大于配置)

package com.liberty.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
/**
 * 注解意思是将此添加到SpringBoot组件里面
 */
@ConfigurationProperties(prefix = "person")
/**
 * ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关配置进行绑定
 * 参数prefix = "person" 将配置文件中的person下面的所有属性一一对应
 */
public class Person
{
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }
}

2.2.5、测试无误后,在测试单元中进行测试,看看是否注入成功

package com.liberty;

import com.liberty.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Demo02ApplicationTests {
    //自动装配
    @Autowired
    Person person;

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

}

------------恢复内容结束------------