1:首先:介绍Yaml背景(YAML 入门教程 | 菜鸟教程)
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
2:基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
- 单引号(' ')中会将 \n 作为字符串输出,双引号(" ")会将 \n 作为换行进行输出。
3:YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
4:举例(实例bean中为了方便,使用Lombok,配置可去上篇文章查看)
(1):创建一个Car实体类
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
// @Component
public class Car {
private String brand;
private Integer price;
}
(2):创建Person类(主要对类型,实体类,集合,数组进行演示)
@ConfigurationProperties(prefix = "person")
@Component
@ToString
@Data
public class Person {
private String userName;
private Boolean boss;
private Date birthday;
private Integer age;
private Car car;
private String[] interests;
private List<String> animal;
private Map<String,Object> score;
private Set<Double> salarys;
private Map<String,List<Car>> allCars;
}
(3)编写application.yaml(或者application.yml,这两个是一样的。在编写该文件时要想有bean中对应字段的提示,则可以看下面第七点)
注意:该文件中最前面的person一定要与(2)中的@ConfigurationProperties(prefix = "person")中的person相对应,这样才能找到,否则无法进行配置
person:
userName: xiaoze
boss: true
birthday: 2021/12/9
age: 21
car:
brand: 劳斯莱斯
price: 99999
interests:
- 篮球
- 足球
- 乒乓球
animal: [阿毛,阿狗]
score: {English: 99,Chinese: 88}
salarys:
- 99.99
- 88.88
allCars:
guide:
- {brand: 比亚迪,price: 9900000}
- brand: 奥迪
price: 999999
- brand: 奔驰
price: 998888
pianyi:
- brand: hhhh
price: 00000
- brand: jjjjj
price: 66666
5:创建Controller进行测试
@RestController
public class HelloYaml {
@Autowired
Person person;
@RequestMapping("/HelloYaml")
public Person person(){
return person;
}
}
6:成果(如果要清楚展示各项,则要下载FeHelper插件即可,下载方法方法很多。)
7:补充:
要想在编写application.yaml中有bean对应字段的提示,在pom.xml中进行导包
<!-- 自定义类绑定的配置提示maven-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
但是导包了以后,在打包项目时仍然有这个包,但是它本身在代码中确实没有什么作用,就是为了给我们提示,而且在jvm中很占内存空间,所以在项目打包时应该去掉它,还应该在pom.xml中进行配置(也就是加上红色部分的代码,这样项目在打包时就没有该包了,会节省很多内存空间。)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>