Springboot之YAML语法

概述

YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式。只要 class 路径上有SnakeYAML library,SpringApplication class 就会自动支持 YAML 作为 properties 的替代。

编写规则

  1. 属性和值是大小写敏感,同JSON
  2. 通过缩进表示层次关系
  3. 字符串默认不需要加单引号或者双引号

YAML语法

基本语法

  • k:(空格)v:表示一对键值对(空格必须有);

  • 空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

  • server:
        port: 8081
        path: /hello
    

值的写法

字面量:普通的值(数字、字符串、布尔)

  • k: v:字面直接来写;
  • 字符串默认不用加上单引号或者双引号;
  • “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
  • name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
  • ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
  • name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对)

  • k: v:在下一行来写对象的属性和值的关系;注意缩进

  • 对象还是k: v的方式

  • friends:
            lastName: zhangsan
            age: 20
    
  • 行内写法

  • friends: {lastName: zhangsan,age: 18}
    

数组(List、Set)

  • 用- 值表示数组中的一个元素

  • pets: 
    	- cat 
    	- dog 
    	- pig
    
  • 行内写法

  • pets: [cat,dog,pig]
    

使用YAML中的值

springboot在不同的环境下有默认的加载文件:

  • application 开发、测试、生产都会加载,公共的

  • application-dev 只在开发环境加载(调试src/main)

  • application-test 只在测试环境加载(调试src/test)

  • application-prod 只在生产环境加载(正式打包部署)

(1)使用@Value

myName: test
@RestController
public class UserController {
    @Value("${myName}") //使用@Value注入配置文件中的值。${}要加引号
    private String name;

    @RequestMapping("/user")
    public String handler(){
        return name; //使用
    }
}
  • 不能直接 、 " { }、" "{ }"来使用配置文件中的值。
  • 需要借助成员变量,使用@Value注入配置文件中的值,通过成员变量来引用。
  • 不管成员变量是什么数据类型,${ }都需要加引号,会自动转换为需要的类型,注入。
  • 对象、Map,通过.来注入单个字段, @Value("${student.name}")
  • 数组、List,通过下标来注入单个元素,@Value("${city[0]}")
  • 只能注入基本类型,不能直接直接注入整个对象、Map、数组、List。

(2)使用@ConfigurationProperties注入对象、Map

使用@Value依次注入对象、Map的字段时,student.id,student.name,student.age,都有相同的前缀student,也可以这样来注入:

student:
  id: 3434
  name: lisi
  age: 35
  score: 99
@RestController
@ConfigurationProperties(prefix = "student") //设置前缀
public class UserController {
    private int id;
    private String name;
    private int age;
    private int score;

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @RequestMapping("/user")
    public String handler(){
        return name; //使用
    }
}
  • 设置前缀、设置对应的成员变量、并提供对应的setter方法,会自动注入该字段的值。

(3) 综合示例

htzw-test-demo:
  varmaplist:
    key11:
      - t1
      - t2
      - t3
    key22:
      - t11
      - t22
      - t33
  list:
    - topic1
    - topic2
    - topic3
  maps: {key1: 'value1', key2: 'value2'}
@RestController
@ConfigurationProperties(prefix = "htzw-test-demo")
public class YamlController {

    private List<String> list;
    private Map<String,String> maps;
    private Map<String,List<String>> varmaplist;

    public void setList(List<String> list) {
        this.list = list;
    }
    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }
    public void setVarmaplist(Map<String, List<String>> varmaplist) {
        this.varmaplist = varmaplist;
    }
    @GetMapping(value = "get")
    public String getValue(){
        System.out.println(list);
       return list.get(1);
    }
}

你可能感兴趣的:(SpringBoot,Springboot,yaml语法)