首页技术栈归档照片墙音乐日记随想收藏夹友链留言关于

YAML教程

写作时间:2026-07-08

YAML教程

SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。

  • application.properties
  • application.yaml

其中,application.yaml 是一种使用 YAML 语言编写的文件,它与 application.properties 一样,可以在 Spring Boot 启动时被自动读取,修改 Spring Boot 自动配置的默认值

YAML 全称 YAML Ain't Markup Language,它是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件。

YAML 的语法如下:

  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数不重要,但同级元素必须左侧对齐。
  • 大小写敏感。

例如:

spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://127.0.01/banchengbang_springboot
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

YAML 常用写法

YAML 支持以下三种数据结构:

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的、不可拆分的值

YAML 字面量写法

字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。

在 YAML 中,使用“key:[空格]value**”**的形式表示一对键值对(空格不能省略),如 url: www.biancheng.net。

字面量直接写在键值对的“value**”**中即可,且默认情况下字符串是不需要使用单引号或双引号的。

name: zhangsan

若字符串使用单引号,则会转义特殊字符。

name: zhangsan \n lisi

输出结果为:

zhangsan \n lisi

若字符串使用双引号,则不会转义特殊字符,特殊字符会输出为其本身想表达的含义

name: zhangsan \n lisi

输出结果为:

zhangsan lisi

YAML 对象写法

在 YAML 中,对象可能包含多个属性,每一个属性都是一对键值对。

YAML 为对象提供了 2 种写法:

普通写法,使用缩进表示对象与属性的层级关系。

website:   
  name: bianchengbang  
  url: www.biancheng.net

行内写法:

website: {name: bianchengbang,url: www.biancheng.net}

YAML 数组写法

YAML 使用“-”表示数组中的元素,普通写法如下:

pets:  
  -dog 
  -cat  
  -pig

行内写法

纯文本复制
pets: [dog,cat,pig]

复合结构

person:
  name: zhangsan
  age: 30
  pets:
    -dog
    -cat
    -pig
  car:
    name: QQ
  child:
    name: zhangxiaosan
    age: 2

YAML 组织结构

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

---
website:
  name: bianchengbang
  url: www.biancheng.net
---
website: {name: bianchengbang,url: www.biancheng.net}
pets:
  -dog
  -cat
  -pig
---
pets: [dog,cat,pig]
name: "zhangsan \n lisi"
---
name: 'zhangsan \n lisi'

例:

application.yaml

person:
  lastName: 小黑
  age: 10
  boss: true
  birth: 2001/1/1
  maps: {k1: hhh,k2: aaa}
  lists:
    - aaa
    - bbb
  dog:
    name: 10
    age: 2

Person.java

package com.yuan.demo.pojo;
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;
import java.util.Map;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;

}

DemoApplicationTests

package com.yuan.demo;
import com.yuan.demo.pojo.Person;
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 Person person;
    @Test
    void contextLoads() {
        System.out.println(person.toString());
    }
}

第二种

Poeson

@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@PropertySource("classpath:yuan.properties")
public class Person {
    @Value("${name}")
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;
}

yuan.properties

name="aaa"
avatar

yuanyourdomain

写代码,做研究,记录生活。

RECOMMENDED

MyBatis 动态 SQL

2026-07-08

Nginx 基础入门

2026-07-08

Maven 多模块与私服

2026-07-08