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);
    }
}
相關文章
相關標籤/搜索