yml语法

409 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过
程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项
目也能顺利的运行起来。当然,用户也可以根据自身的需要使用配置文件
修改 Spring Boot 的默认设置。
SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。
application.properties
application.yml
其中,application.yml 是一种使用 YAML 语言编写的文件,它与
application.properties 一样,可以在 Spring Boot 启动时被自动读取,修
改 Spring Boot 自动配置的默认值。
YAML 简介
YAML 全称 YAML Ain't Markup Language,它是一种以数据为中心的标记
语言,比 XML 和 JSON 更适合作为配置文件。
想要使用 YAML 作为属性配置文件(以 .yml 或 .yaml 结尾),需要将
SnakeYAML 库添加到 classpath 下,Spring Boot 中的 spring-bootstarter-web 或 spring-boot-starter 都对 SnakeYAML 库做了集成, 只要
项目中引用了这两个 Starter 中的任何一个,Spring Boot 会自动添加
SnakeYAML 库到 classpath 下。
YAML 语法
YAML 的语法如下:
使用缩进表示层级关系。
缩进时不允许使用 Tab 键,只允许使用空格。
缩进的空格数不重要,但同级元素必须左侧对齐。
大小写敏感。
约定
k: v 表示键值对关系,冒号后面必须有一个空格
松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如
java中的lastName属性,在yml中使用lastName或 last-name都可
正确映射

YAML 常用写法
YAML 支持以下几种数据结构:
普通的值(数字、字符串、布尔、日期) 
对象 属性值的集合
数组 一组按次序排列的值
集合 List、Set 与数组一样,Map与对象一样键值对的集合
普通值(字面量)
字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及
日期等。
在 YAML 中,使用“key:[空格]value”的形式表示一对键值对(空格不能省
略)
字面量直接写在键值对的“value”中即可,且默认情况下字符串是不需要使
用单引号或双引号的。
若字符串使用单引号,则不会转义特殊字符,特殊字符会输出为其本身想
表达的含义
输出:zhangsan \n lisi 
若字符串使用双引号,则会转义特殊字符,\n代表换行,输出:

​编辑

name1: zhangsan
name2: 'zhangsan \n lisi'
name3: "zhangsan \n lisi"
age: 18
flag: true
date: 2022/04/21

 对象(属性和值)、Map(键值对) 它们都是一对键值对,YAML 为对象提供了 2 种写法 普通写法 ,使用缩进表示对象与属性的层级关系。​编辑

行内写法​编辑 

数组、list、set YAML 使用“-”表示数组、list、set 中的元素

普通写法 

​编辑

行内写法

​编辑

复合结构

以上几种数据结构可以任意组合使用,以实现不同的用户需求 

​编辑

 YAML 组织结构

一个 YAML 文件可以由一个或多个文档组成,文档之间使用“---”作为分隔 符,且个文档相互独立,互不干扰。如果 YAML 文件只包含一个文档,则“- --”分隔符可以省略。

配置绑定
所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑
定。通常,我们会把一些配置信息(例如,数据库配置)放在配置文件
中,然后通过 Java 代码去读取该配置文件,并且把配置文件中指定的配置
封装到 JavaBean(实体类) 中。
SpringBoot 提供了以下 2 种方式进行配置绑定:
使用 @ConfigurationProperties 注解
使用 @Value 注解
@ConfigurationProperties
通过 Spring Boot 提供的 @ConfigurationProperties 注解,可以将全局配
置文件中的配置数据绑定到 JavaBean 中。

@Configuration
@ConfigurationProperties(prefix = "sb")
public class DbConfig {
String username;
String password;
Date birthday;
Map books;
Person person;
Map books2;
Person person2;
String [] hobby;
List list;
Set set ;
int [] hobby2;
List<Map> mapList;
/************省略geter/seter方法*************/
}

只有在容器中的组件,才会拥有 SpringBoot 提供的强大功能。如 果我们想要使用 @ConfigurationProperties 注解进行配置绑定, 那么首先就要保证该对 JavaBean 对象在 IoC 容器中,所以需要用 到 @Configuration 注解来添加组件到容器中。 JavaBean 上使用了注解 @ConfigurationProperties(prefix = "sb") ,它表示将这个 JavaBean 中的所有属性与配置文件中以“sb”为前 缀的配置进行绑定。