YAML语法

一、基本语法

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

server:
  port: 8081
  path: /hello

二、值的写法

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

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

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

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

friends:
  lastName: zhangsan
  age: 20

行内写法:

friends: {lastName: zhangsan,age: 18}

3、数组(List、Set)

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

pets:
 ‐ cat
 ‐ dog
 ‐ pig

行内写法

pets: [cat,dog,pig]

三、例子

1、javaBean

/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@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;

2、application.yml

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: v2}
  lists: [lisi,wangwu]
  dog:
    name: 小狗
    age: 2

3、pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

4、测试代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootHelloworldApplicationTests {

    @Autowired
    private Person person;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

}

四、相同的配置写在 properties 文件中也可以 ( 操作和 yml 一样 )

1、application.properties

person.last-name=张三
person.age=18
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15

2、解决 properties 可能乱码问题

原文地址:https://www.cnblogs.com/fangwu/p/8822948.html