【SpringBoot框架学习】yml/yaml语法 详解

Youzg LOGO

基本知识点:

什么是yml/yaml?:

YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的 递归缩写
在开发的这种语言时,YAML 的意思其实是:
"Yet Another Markup Language"(仍是一种标记语言)
这种语言以数据作为中心,而不是标记语言重点

为什么要使用yml/yaml来进行开发?

优点

  1. 语法要简单灵活
  2. 能够写注释
  3. 能够比较方便的覆盖参数值(方便书写或者debug)
  4. 能够重用配置片段
    比较大一点的project中,
    经常有很多地方的配置需要保持一致,
    最好的办法就是引入变量引用的概念
  5. 可以继承

基本语法:

八大基本类型 + 字符串:

格式

目标成员名: 普通的值

注意

  1. 字符串默认不用加上双引号或者单引号
  2. '' (单引号):
    不会 转义 字符串里面的特殊字符
    特殊字符最终会变成和普通字符一样输出

比如:msg: 'hello \n spring boot'
输出:hello \n spring boot

  1. "" (双引号):
    转义特殊字符
    特殊字符会作为本身想表示的意思

比如:
msg: "hello \n spring boot"
则会 输出 :hello 换行 spring boot


对象:

格式

目标对象名:
	对象的成员1: 1成员的值
	对象的成员2: 2成员的值
	...

Map(双列集合):

格式

目标map的名称:
	key1: value1
	key2: value2
	...

数组(List、Set 等单列集合):

格式

目标单列集合名:
 - 集合中的值1
 - 集合中的值2
 - 集合中的值3
 - ...

目标单列集合名: [集合中的值1, 集合中的值2, 集合中的值3, ...]

注意点:

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

属性的注入:

在本人之前的博文中曾讲到过:
配置文件目的 是:

配置文件中的值注入给代码中 需要的地方

在SpringBoot中,提供了相关的注解,来注入相应的值:

@ConfigurationProperties注解:

作用

一般都是配合该注解的 prefix属性
来指定要进行注入的 配置的值

注意

  1. prefix属性的值,为配置文件中的 要赋值的段落名
  2. 实体类中要被赋值的成员名,要与 配置文件中的对应段落名 一致

例如:

pet:
  name: "吉吉国王"
  yell: "呜~"
package edu.youzg.demo.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author: Youzg
 * @CreateTime: 2020-06-17 15:17
 * @Description: 带你深究Java的本质!
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "pet")
@Component
public class Pet {
    private String name;
    private String yell;
}

随机数 的生成:

格式

${random.随机数的类型}

而上述的 随机数类型,总共分为 4种
分类

  • int(可设置上限值)
  • long(可设置上限值)
  • uuid(随机字符串,更不容易 重复)
  • value(随机字符串)

例如:

id: ${random.uuid}  # value int long

使用展示:

本人先来给出一个宠物类

package edu.youzg.demo.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author: Youzg
 * @CreateTime: 2020-06-17 15:17
 * @Description: 带你深究Java的本质!
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "pet")
@Component
public class Pet {
    private String name;
    private String yell;
}

接下来,本人给出一个 粉丝类

package edu.youzg.demo.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * @Author: Youzg
 * @CreateTime: 2020-06-17 15:13
 * @Description: 带你深究Java的本质!
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "myFan")
public class Fan {
    private String name;
    private String id;
    private Date birthday;
    private Integer age;
    private List<Pet> pets;
}

对应的 yml配置文件

myFan:
  name: "右转哥的小迷妹"
  id: ${random.uuid}  # value int long
  birthday: 2020/6/18
  pets:
    - name: "加菲"
      yell: "喵~"
    - name: "史努比"
      yell: "汪~"

最后是 测试类

package edu.youzg.demo;

import edu.youzg.demo.model.Fan;
import edu.youzg.demo.model.Pet;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {
    @Autowired
    private Fan fan;

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

}

现在,本人来展示下运行结果
运行结果 展示
可以看到:
本人没有配置age成员的值,
因此,除了age成员为null,其余成员的值都为配置文件中所配置的值

猜你喜欢

转载自www.cnblogs.com/codderYouzg/p/13162666.html