首页 » java

SpringBoot - YAML 配置

   发表于:java评论 ()   热度:115

1.什么是YAML


YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,是一种以数据为中心表的编程语言,因为文件以.YML结尾,所以YML又被称为“やめる”(雅麦噜)文件,相比XML,JSON更加适合作为配置文件。

下面是三种格式的配置文件的对比。当然,在数据量比较少的时候感觉不明显,但是在数据量大的时候,YML就有明显的优势。因为YML可以省略大量的前缀。

YML:

server:
  port:8080
  url:192.168.1.1

XML:

<server>
      <port>8080</port>
      <url>192.168.1.1</url>
</server>

.properties:

server.port=8080
server.url=192.168.1.1

2.YML基本语法


YML是一个大小写以及空格敏感的语言。以空格的缩进来控制层级关系。空格的个数不重要,只要对齐就表示在同一个层级。
基本句式: K:空格V

普通值:

字符串默认不用加引号

双引号:不会转义特殊字符:

name:"test \n test2"
输出:
test
test2

单引号:会转义特殊字符

name:'test \n test2'
输出:test \n test2

对象(两种方式):

user:
  username: 张三
  password: 123456
user: { username: 张三, password: 123456}

数组(List Set):

user
 - zhangsan
 - lisi
 - wangwu
user: {zhangsan,lisi,wangwu}

3.SpringBoot案例

创建application.yml:

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2018/05/04
  map: {k1: v1,k2: v2}
  list:
    - lisi
    - good
  dog:
    name: moggy
    age: 2

创建Person类:

package com.springboot.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

/**
 * @author BaoZhou
 * @date 2018/5/4
 * @ConfigurationProperties:这个类文件中的属性是配置文件中的设定
 */
@Component
@ConfigurationProperties(prefix = "person")
//需要使用以上两个注解,person可以替换成你配置文件中的名字。
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String,Object> map;
    private List<Object> list;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", map=" + map +
                ", list=" + list +
                ", dog=" + dog +
                '}';
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

Dog类随意定义,这里就不贴代码了。

建立测试类:

package com.springboot;

import com.springboot.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * SpringBoot单元测试
 *
 * @author BaoZhou
 * @date 2018/5/4
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootConfigApplication {
    @Autowired
    Person person;

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

这里person类就通过YML文件注入了

4.运行测试结果


运行后可以看到person输出内容

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。