Spring Boot學習筆記(2)——yaml

一、配置文件

Spring Boot的配置文件的作用是修改自動配置中的一些默認值,這些配置在底層都已經配置好了。

Spring Boot使用全局的配置文件,配置文件的名稱是固定的,而全局的配置文件能夠對系統的一些默認配置進行相應的修改。Spring Boot主要有兩種配置文件:

  • application.praperties
  • application.yaml

配置文件主要放在src/main/resources目錄或者類路徑/config下。

二、ymal配置文件

yaml是YMAL(YAML Ain't Markup Language)語言的文件,它一種以數據爲中心,比json、xml更適合做配置文件。

1、基本語法

(1)key:(空格)value   

          表示一對鍵值對(注意空格必須有);

它是以空格的縮進來控制層級關係,對於左對齊的縮進均表示同一層級關係。同時注意屬性和值對大小寫也是敏感的。

server:
  port: 8081

改配置等價於server.port=8081

(2)值的寫法

key: value         ------> 字面直接來寫;

         --""雙引號:不會轉義字符串裏面的特殊字符,特殊字符會作爲本身想表達的意思。

                      例如:name: "zhangsan  \n lisi",這裏輸出結果:zhangsan 換行 lisi。

        --''單引號:會轉移特殊字符,特殊字符最終最終會被翻譯爲一個普通的字符串數據。

                      例如:name: "zhangsan  \n lisi",這裏輸出結果:zhangsan \n lisi。

對象、Map(屬性和值)(鍵值對):

       k: v:在下一行來寫對象的屬性和值的關係,注意縮進;如下面有一個friends對象:

friends:
    lastName: zhangsan
    age: 20

行內寫法:

friends: {lastName: zhangsan,age: 20}

數組(List、Set)

使用- 值表示數組中的元素:

pets:
    - cat
    - dog
    - pig

行內寫法:

pets: [cat,dog,pig]

三、配置文件值的注入(實例)

1、首先創建一個application.yml配置文件:

server:
  port: 8081

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

2、根據配置文件,創建一個Person類和Dog類

package cn.com.jzt.insight.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 :告訴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> map;
    private List<Object> lists;
    private Dag dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", map=" + map +
                ", lists=" + lists +
                ", 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> getLists() {
        return lists;
    }

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

    public Dag getDog() {
        return dog;
    }

    public void setDog(Dag dog) {
        this.dog = dog;
    }
}
package cn.com.jzt.insight.bean;

public class Dag {
    private String name;
    private Integer age;

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

3、最後寫一個測試類:

package cn.com.jzt.insight;

import cn.com.jzt.insight.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的單元測試
 * 可以在測試期間進行自動注入功能
 */
@RunWith( SpringRunner.class )
@SpringBootTest
public class InsightSpringBootApplicationTest {
    @Autowired
    Person person;

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

4、結果

運行該測試類,得到一些結果:

說明我們的配置文件的內容值已經被注入到類中。

四、利用properties文件配置

與yml配置文件相同,使用properties也可做爲配置文件注入到spring中。application.properties文件如下:

server.port=8081

#配置person的值
person.last-name=zhangsan
person.age=18
person.boss=false
person.birth=2017/12/12
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=小狗
person.dog.age=3

再次運行測試類:InsightSpringBootApplicationTest,運行結果如下:

可以發現,與yml配置文件一樣,也注入到了spring容器中。但是出現了中文亂碼現象。解決方法如下:

在File--settings--Editor--File Encoding,在Default encoding for properties files中選擇utf-8,並勾選Transparent native-to-ascii conversion,如下圖所示。

再次運行得到結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章