spring boot yaml 配置

前言

咱们知道java 由于历史的缘由,一直有一个配置地狱的痛点。那么如何解决掉它呢?
spring boot 是一柄利器,可是呢,仍是要配置。

看来配置的避免不了的了。
那么如何能够减轻这种痛苦呢?
yaml 就是一个减轻的利器。java

正文

yaml 是什么呢? yaml ain't markup languagespring

这是什么意思呢?解释的不是一门标记语言。可是不管它怎么说,他的确是做为标记语言存在的。api

那么这个yaml配置放在哪里里?数组

放在这下面哈。app

先来熟悉一下yaml语法吧,这里只是作一些我本身经验。
下面是菜鸟的,我认为起码应该熟悉这个。ide

基本语法

    大小写敏感
    使用缩进表示层级关系
    缩进不容许使用tab,只容许空格
    缩进的空格数不重要,只要相同层级的元素左对齐便可
    '#'表示注释

数据类型

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

    对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    纯量(scalars):单个的、不可再分的值

1.key:valuespring-boot

string 类型默认不用加"" 或者 ''
这种类型的话:"" 会转义,'' 不会转义。测试

  1. 对象的时候:
friend:
  lastname: bob
  firstname: z

若是是简单的对象建议这样写:friend:{ lastname:bob,firstname:z}
2.这里介绍一下数组,支持两种写法:this

sex
 - boy
 - girl

若是是简单的数组。那么我建议这样写: sex:[boy,girl]scala

yaml 读取

yaml 除了这样写能让spring boot读取到,这是系统自动会去读取server。

那么咱们本身定义的配置该如何读取?

person 类

package com.axm.demo.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;

/**
 * @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;

    public String getLastName() {
        return lastName;
    }

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

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

    public Integer getAge() {
        return age;
    }

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

    public boolean isBoss() {
        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> getMaps() {
        return maps;
    }

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

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

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

dog 类

package com.axm.demo.bean;

public class Dog {
    private  String name;
    private  Integer ages;

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", ages=" + ages +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public Integer getAges() {
        return ages;
    }

    public void setAges(Integer ages) {
        this.ages = ages;
    }
}

那么在yml中这样写:

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: 12}
  lists:
    - lisi
    - zhaolu
  dog:
    name: 小狗

这里须要配置的是person中增长注解:

@Component
@ConfigurationProperties(prefix ="person")

pom.xml 中增长:

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

测试其是否配置成功:

package com.axm.demo;

import com.axm.demo.bean.Person;
import org.junit.jupiter.api.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;

@RunWith(SpringRunner.class)
@SpringBootTest
class DemoApplicationTests {
    @Autowired
    Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}
相关文章
相关标签/搜索