基本语法

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进不允许使用tab,只允许空格

  • 缩进的空格数不重要,只要相同层级的元素左对齐即可

  • '#'表示注释

数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  • 纯量(scalars):单个的、不可再分的值

基本使用

name: 应用名称
application:
	name: 应用名称

在Springboot 中的配置文件中,最经常使用的就是这种简单的配置。

这种配置可以通过以下形式获取到结果:

@Value("name") 
private String name;
@Value("application.name")
private String applicationName;

List类型

在配置中我们经常需要配置数组类型的值,那要怎么来配呢?

#第一种
applicaiton-list:
	- app1
	- app2
	- app3
#第二种
application-list: app1,app2,app3
#第三种
application-list: [ app1,app2,app3 ]

以上几种方式都可以用来配置数组。那怎么来读取呢。第二种可以通过以下形式读取,第一、第三种@Value读取不了

@Value("${application-list}")
private List<String> applicationList;

Map类型

那如果要配置一个map呢,如下所示

application-map:
	app1: name1
	app2: name2
	app3: name3

那要怎么接收这个map呢。往下看

复杂配置的接收

application-config:
  enable: true
  white-list: 1,2,3
  name-map:
    1: app1
    2: app2
    3: app3
    4: app4
  list-object:
    - id: 1
      name: app1
    - id: 2
      name: app2
  map-object:
    1:
      id: 1
      name: app1
    2:
      id: 2
      name: app2

配置接收:

定义Applicaiton对象

import lombok.Data;

/**
 * @Author: lis216
 * @Date: 2024/1/10
 * @Modify By:
 */
@Data
public class Application {
    private Integer id;
    private String name;
}

定义接收配置的对象

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * @Author: lis216
 * @Date: 2024/1/10
 * @Modify By:
 */
@Data
@EnableConfigurationProperties(ApplicationProperties.class)
@ConfigurationProperties(prefix = "application-config")
@Component
@RefreshScope
public class ApplicationProperties {
    private boolean enable;
    private List<Integer> whiteList;
    private Map<Integer, String> nameMap;
    private List<Application> listObject;
    private Map<Integer, Application> mapObject;
}

配置使用

@Resource
private ApplicationProperties applicationProperties;

最终效果

ApplicationProperties(enable=true, whiteList=[1, 2, 3], nameMap={1=app1, 2=app2, 3=app3, 4=app4}, listObject=[Application(id=1, name=app1), Application(id=2, name=app2)], mapObject={1=Application(id=1, name=app1), 2=Application(id=2, name=app2)})