【SpringBoot深入浅出】2 - YAML语法

3 YAML语法

3.1 YAML简介

在这里插入图片描述

  • YAML:一种表达数据序列化的标记语言,它有两种全称,用来说明YAML的本质和作用
    • Yet Another Markup Language,“另一种标记语言”,说明了它本质是一种标记语言
    • YAML Ain’t Markup Language,“YAML不是一种标记语言”,强调了这种语言以数据为中心

3.2 基础语法

3.2.1 语法特点

语法特点

  • 空格要求严格
  • 大小写敏感
  • 缩进来表示层级关系

3.2.2 注释

  1. 注释
    格式:#后接注释内容

注意:YAML只有单行注释

3.2.3 字面量

格式:k: v

注意:

  • 冒号:之后有空格
  • 字符串默认不需要双引号或者单引号,如果加上单引号或者双引号,效果如下:
    • 双引号"":会转义字符串中的特殊字符
    • 单引号'':不会转义字符串中的特殊字符,字符串是什么样子还是什么样子

3.3.3 对象/Map(键值对)

多行格式:

k:
  k1: v1
  k2: v2

单行格式:

k: {k1: v1,k1: v2}

注意:

  • 多行使用缩进来表示层级关系,缩进只能用空格,不能用制表键TAB
  • 单行用{},并使用逗号+空格的形式分开(,)

实例

# 多行
student:
  name: Tom
  age: 18
  
# 单行
teacher: {name: mike, age: 30}

3.3.4 数组(list、set)

多行格式

a:
  - v1
  - v2
  - v3

单行格式

a: [v1, v2, v3]

注意

  • 多行格式用分隔符-+空格表示一个成员
  • 单行格式用中括号[],并用逗号+空格分隔各成员(,)

实例

# 实例
# 多行
pet:
  - cat
  - dog
  - pig

# 单行
fruit: [apple, watermelon, pineaple]

4 YAML给属性赋值

4.1 使用@Value赋值

  1. 创建一个实体类Dog,使用@ValueDog对象赋值
package com.cap.springboottutorial01.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
    @Value("旺财")
    private String name;
    @Value("6")
    private int age;

}
  1. 在测试方法中取到该Bean
package com.cap.springboottutorial01;

import com.cap.springboottutorial01.pojo.Dog;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Springboottutorial01ApplicationTests {
    @Autowired
    private Dog dog;

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

}
  1. 结果得到
Dog(name=旺财, age=6)

4.2 使用YAML给属性赋值

  1. 导入依赖
<!-- 导入配置文件依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  1. 新建一个Person
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component("person")
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private Boolean marries;
    private Date birth;
    private Map<String,Integer> gradeMap;
    private List<String> bookList;
    private String[] pens;
    private Dog dog;

}

@ConfigurationProperties(prefix = "person")
使用该注解可以引用配置文件中的属性
prefix指该属性的属性名

  1. 编写配置文件application.yaml
person:
  name: Tom
  age: 18
  marries: false
  birth: 2002/07/20
  gradeMap: {English: 99, Mathematics: 88}
  bookList: [西游记, 水浒传, 三国演义, 红楼梦]
  pens:
    - 钢笔
    - 铅笔
    - 圆珠笔
  dog:
    name: 小黑
    age: 5

map不能使用中文

  1. 测试
@SpringBootTest
class Springboottutorial01ApplicationTests {

    @Autowired
    private Person person;

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

}
  1. 结果得到
Person(
	name=Tom, 
	age=18, 
	marries=false, 
	birth=Sat Jul 20 00:00:00 CST 2002, 
	gradeMap={
		English=99, 
		Mathematics=88
		}, 
	bookList=[西游记, 水浒传, 三国演义, 红楼梦], 
	pens=[钢笔, 铅笔, 圆珠笔], 
	dog=Dog{
		name='小黑', 
		age=5
		})

4.3 使用Properties给属性赋值(对比使用)

  1. 新建Student
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "student")
@PropertySource("classpath:student-info.properties")
public class Student {

    private String name;

    private String age;

    private Dog dog;

}
  1. 新建student-info.properties
student.name=Tom
student.age=18
student.dog.name=旺财
student.dog.age=6
  1. 测试方法
@SpringBootTest
class Springboottutorial01ApplicationTests {

    @Autowired
    private Student student;

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

}
  1. 结果得到:
Student(name=Tom, age=18, dog=Dog{name='Íú²Æ', age=6})

可以看到properties会乱码,我们需要去Settings>Editor>File Encodings设置
在这里插入图片描述再次运行测试方法得到

Student(name=Tom, age=18, dog=Dog{name='旺财', age=6})

4.4 YAML和其他两种赋值方式的比较

  • 相比于Properties配置文件赋值,YAML可以更加轻松得简化对象、数组等的赋值,也具有良好的阅读性
  • YAML和@Value赋值相比
    在这里插入图片描述因此,实践中更推荐YAML!

猜你喜欢

转载自blog.csdn.net/Cap220590/article/details/107452086
今日推荐