基本知识点:
什么是yml/yaml?:
YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的 递归缩写
在开发的这种语言时,YAML 的意思其实是:
"Yet Another Markup Language"(仍是一种标记语言)
这种语言以数据作为中心,而不是以标记语言为重点!
为什么要使用yml/yaml来进行开发?
优点:
- 语法要简单,灵活
- 能够写注释
- 能够比较方便的覆盖参数值(方便书写或者debug)
- 能够重用配置片段,
比较大一点的project中,
经常有很多地方的配置需要保持一致,
最好的办法就是引入变量和引用的概念- 可以继承
基本语法:
八大基本类型 + 字符串:
格式:
目标成员名: 普通的值
注意:
- 字符串默认不用加上双引号或者单引号
- '' (单引号):
不会 转义 字符串里面的特殊字符 ,
特殊字符最终会变成和普通字符一样输出比如:msg: 'hello \n spring boot'
输出:hello \n spring boot
- "" (双引号):
会转义特殊字符 ,
特殊字符会作为本身想表示的意思比如:
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, ...]
注意点:
- :(冒号)后的空格不能省略
- 以缩进来控制层级关系,
只要是左边对齐的一列数据都是同一个层级的- 属性和值的大小写都是十分敏感的
属性的注入:
在本人之前的博文中曾讲到过:
配置文件 的 目的 是:
将配置文件中的值注入给代码中 需要的地方
在SpringBoot中,提供了相关的注解,来注入相应的值:
@ConfigurationProperties注解:
作用:
一般都是配合该注解的 prefix属性,
来指定要进行注入的 配置的值
注意:
- prefix属性的值,为配置文件中的 要赋值的段落名
- 实体类中要被赋值的成员名,要与 配置文件中的对应段落名 一致
例如:
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,其余成员的值都为配置文件中所配置的值