SpringBoot簡明教程之項目屬性配置(一):YAML簡介

配置文件

首先,咱們打開咱們的上一篇博客中建立的項目的resource文件夾中能夠看到,在咱們的SpringBoot應用使用一個全局的配置文件,配置文件名是固定的:application.xxx。css

配置文件的做用:修改SpringBoot自動配置的默認值;由於大多數的配置SpringBoot在底層都給咱們自動配置好,因此咱們只須要在配置文件中根據應用的實際需求更改配置便可。java

例如:咱們在默認的配置文件application.properties進行以下配置:git

server.port=8081
server.servlet.context-path=/test

而後啓動個人SpringBoot應用,在控制檯中咱們就會發現,咱們啓動的端口和訪問路徑都發生了改變:github

這裏寫圖片描述

啓動瀏覽器,在瀏覽器中輸入:http://localhost:8081/test/hello,便可正常訪問咱們的應用。web

這裏寫圖片描述

在這裏咱們須要重點說明的是,除了.properties格式的配置文件之外,SpringBoot還有一種.yml的配置文件格式,強烈推薦後者做爲配置文件的格式。spring

在介紹yml以前呢,咱們先介紹一個概念:標記語言。也稱爲標誌語言、標識語言、markup language)是一種將文本(Text)以及文本相關的其餘信息結合起來,展示出關於文檔結構和數據處理細節的計算機文字編碼。與文本相關的其餘信息(包括例如文本的結構和表示信息等)與原來的文本結合在一塊兒,可是使用標記(markup)進行標識。當今普遍使用的標記語言是超文本標誌語言(HyperText Markup Language,HTML)和可擴展標誌語言(eXtensible Markup Language,XML) json

什麼是.yml

.yml的全稱是:YAML,是」YAML Ain’t a Markup Language」的遞歸縮寫,意思是:YAML不是一種標記語言。在開發的這種語言時,YAML 的意思實際上是:」Yet Another Markup Language」:YAML還是一種標記語言,但爲了強調這種語言以數據作爲中心,而不是以標記語言爲重點,而用反向縮略語重命名 。瀏覽器

爲何推薦使用YAML做爲配置文件

一句話:YAML以數據爲中心,比json、xml等更適合作配置文件;springboot

舉個簡單的例子:ruby

YAML配置端口文件:

server:
  port: 8081

XML配置端口文件:

<server>
    <port>8081</port>    
</server>

YAML的基本語法:

  • YAML使用可打印的Unicode字符,可以使用UTF-8或UTF-16。

  • 使用空格爲文件縮進來表示結構,只要是左對齊的一列數據,都是同一個層級的;不過不能使用跳格字符(TAB)。

    例如:

    server:
      port: 8081
      path: /hello
  • 註解由井字號( # )開始,能夠出如今一行中的任何位置,並且範圍只有一行(也就是通常所謂的單行註解)

    server: # 端口配置
      port: 8081
  • 每一個清單成員以單行表示,並用短槓和空格( - )起始。或使用方括號( [ ] ),並用逗號和空白( , )分開成員。

    pets: # 每一個成員當行顯示
    ‐ cat
    ‐ dog
    ‐ pig
    pets: [cat,dog,pig] # 行內寫法
  • 每一個散列表的成員用冒號和空格( : )分開鍵值和內容。或使用大括號( { } ),並用逗號和空格( , )分開。

    • 散列表的鍵值能夠用問號 ( ? )起始,用來明確的表示多個詞彙組成的鍵值
    friends: # 每一個屬性單行顯示
    lastName: zhangsan 
    age: 20
    friends: {lastName: zhangsan,age: 18} # 行內寫法
  • 字符串日常並不使用引號,但必要的時候能夠用雙引號( )或單引號( )框住。

    • 使用雙引號表示字符串時,可用倒斜線( \ )開始的轉義字符表示特殊字符。

    例如:name: 「zhangsan \n lisi」 輸出爲: zhangsan 換行 lisi

  • 區塊的字符串用縮進和修飾符(非必要)來和其餘數據分隔,有新行保留(preserve)(使用符號 | )或新行摺疊(flod)(使用符號 > )兩種方式。

    data: >
     Wrapped text      
     will be folded      
     into a single       
     paragraph            
    
     Blank lines denote   # 空白行表明段落之間的間距
     paragraph breaks
  • 在單一文件中,可用連續三個連字號()區分多個文件。

    • 另外,還有選擇性的連續三個點號( )用來表示文件結尾。
    --- # 電影清單 - Casablanca - North by Northwest - Notorious
  • 重複的內容可以使從參考標記星號 ( * )複製到錨點標記( & )。

    # 文件中重複的部分用這個方法處理:使用錨點(&)和引用(*)標籤將"aa"散列表的內容複製到"bb"散列表
    
    aa:  &id001 
         city:   East Centerville
      state:  KS
    
    bb:  *id001
  • 指定格式可使用兩個驚歎號( !! ),後面接上值。

    a: 123                     # 整數
    b: "123"                   # 字符串
    c: 123.0                   # 浮點數
    d: !!float 123             # 浮點數,使用!!表示爲嚴格形態
    e: !!str 123               # 字符串,使用嚴格形態
    f: !!str Yes               # 字符串,使用嚴格形態

配置文件注入示例

  1. 項目結構圖:

    這裏寫圖片描述

  2. 建立一個寵物類:Dog.java

    package com.example.springboot02.controller.bean;
    
    /** * @Author: REN * @Description: * @Date: Created in 0:31 2018/8/22 */
    public class Dog {
       private String name;
       private Integer age;
    
       @Override
       public String toString() {
           return "Dog{" +
                   "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. 建立主人類:Person.java

    package com.example.springboot02.controller.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: REN * @Description: * @Date: Created in 0:25 2018/8/22 */
    
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
       private String name;
       private Integer age;
       private Date birth;
       private List<Object> list;
       private Map<String,Object> maps;
       private Dog dog;
    
       @Override
       public String toString() {
           return "Person{" +
                   "name='" + name + '\'' +
                   ", age=" + age +
                   ", birth=" + birth +
                   ", list=" + list +
                   ", maps=" + maps +
                   ", dog=" + dog +
                   '}';
       }
    
       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;
       }
    
       public Date getBirth() {
           return birth;
       }
    
       public void setBirth(Date birth) {
           this.birth = birth;
       }
    
       public List<Object> getList() {
           return list;
       }
    
       public void setList(List<Object> list) {
           this.list = list;
       }
    
       public Map<String, Object> getMaps() {
           return maps;
       }
    
       public void setMaps(Map<String, Object> maps) {
           this.maps = maps;
       }
    
       public Dog getDog() {
           return dog;
       }
    
       public void setDog(Dog dog) {
           this.dog = dog;
       }
    }
  4. 在pom.xml中導入以下依賴:

    <!--導入配置文件處理器,配置文件進行綁定就會有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  5. 在配置文件application.yml中進行以下編寫:

    server:
     port: 8081
    
    person:
     name: ren
     age: 18
     birth: 2018/08/22
     maps: {k1: v1,k2: v2}
     list:
       - hi    - hello  dog:
       name: rack
       age: 2
  6. 建立PersonController類:

    package com.example.springboot02.controller;
    
    import com.example.springboot02.controller.bean.Person;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /** * @Author: REN * @Description: * @Date: Created in 0:19 2018/8/22 */
    
    @RestController
    public class PersonController {
    
       @Autowired
       Person person;
    
       @RequestMapping("/person")
       public Person person() {
           return person;
       }
    }
  7. 直接運行主函數,在瀏覽器輸入:http://localhost:8081/person 便可看到內容已經成功的進行了注入:

    這裏寫圖片描述

總結

這一節,咱們簡單介紹了有關Spring Boot的配置文件信息。着重介紹了有關YAML文件的有關語法,以及如何經過配置文件將屬性注入到javaBean中,這一節主要掌握如何經過YAML文件對Spring Boot項目屬性配置便可。

源碼下載

點擊下載

特別說明:

參考文獻:
尚硅谷,SpringBoot核心技術篇

轉載說明: 支持轉載,但請保留原做者,原文連接,微信公衆號二維碼

這裏寫圖片描述
掃碼關注做者我的技術公衆號,不按期將有學習資源分享
相關文章
相關標籤/搜索