yml语法结构及其使用

基本语法

k:(空格) v表示一对键值对(空格必须要)
空格的缩进来控制层级关系;只要是左对齐的一组数据,都是同一层级关系

server:
    port: 8070
    path: /test

属性值区分大小写

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

k: v下一行写对象和属性的对应关系,注意缩进
对象还是k: v

person:
    name: zhangsan
    age: 18

行内写法:

person: {name: zhangsan,age: 18}

数组(List、set)

animals:
    - cat
    - dog
    - pig

行内写法:

animals: [cat,dog,pig]

占位符

  person:
  #在名字后加一段随机字符
    Name: zhansan${random.uuid}
  #随机数
    Age: ${random.int}
    Boss: true
    Birth: 1998/01/01
    Maps: {k1: v1,k2: v2}
    Lists:
      - lisi
      - wangwu
    dog:
  #输出zhangsan_dog
  #name:${person.hello:hello}_dog输出hello_dog   
  #  person没有hello属性,:后面为默认值
      name: ${person.name)_dog
      age: 2

应用

实体类

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String Name;
    private int Age;
    private boolean Boss;
    private Date Birth;
    private List Lists;
    private Map Maps;
    private Dog Dog;
    //省略get、set方法和toString方法
}
public class Dog {
    private String name;
    private int age;
}

application.yml文件:

  person:
    Name: zhansan
    Age: 18
    Boss: true
    Birth: 1998/01/01
    Maps: {k1: v1,k2: v2}
    Lists:
      - lisi
      - wangwu
    dog:
      name: xiaogou
      age: 2

执行结果:
在这里插入图片描述
松散绑定在这里插入图片描述

@ConfigurationProperties(prefix = “”) @value
功能 支持批量注入配置文件中的属性 一个个注入
松散绑定(松散语法) 支持 不支持
SpEL语言 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

SpEl基本语法实例:#{11*3}
${key}:从环境变量、配置文件中获取值
JSR303数据校验:应用标签 @Validated
在这里插入图片描述

	@Value("${person.age}")
    private int Age;

复杂类型封装:map,list,对象等的封装
总结:如果是在某项业务逻辑中需要获取某项值,使用@value注解

关于在另外的yml文件中引用,而非application.yml中

使用@PropertySource(value = {“classpath:person.yml”})标签

package com.example.demo.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;


import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;
/*
* @PropertySource标签用于引用其他的yml文件
* */
@PropertySource(value = {"classpath:person.yml"})
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    //Name必须为邮箱格式
    //@Email
    private String Name;
    //@Value("${person.age}")
    private int Age;
    private boolean Boss;
    private Date Birth;
    private List Lists;
    private Map Maps;
    private Dog Dog;
    //省略get、set、toString
}

person.yml

  person:
    Name: zhansan
    Age: 18
    Boss: true
    Birth: 1998/01/01
    Maps: {k1: v1,k2: v2}
    Lists:
      - lisi
      - wangwu
    dog:
      name: xiaogou
      age: 2

其中在实际写代码过程中,yml文件开头需要两个空格,否则无法识别

发布了73 篇原创文章 · 获赞 20 · 访问量 4456

猜你喜欢

转载自blog.csdn.net/lzl980111/article/details/103776902