【SpringBoot 框架】- SpringBoot 配置文件

SpringBoot 系列:

【SpringBoot 框架】- 入門——環境搭建、工程熱部署、idea快捷創建SpringBoot項目
【SpringBoot 框架】- SpringBoot 原理分析
【SpringBoot 框架】- SpringBoot 配置文件
【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis

目錄

一、SpringBoot配置文件類型

1. application.properties 配置文件

2. application.yml(application.yaml) 配置文件

二、配置文件與配置類的屬性映射

1、使用註解 @Value 映射

2、使用註解 @ConfigurationProperties 映射


一、SpringBoot配置文件類型

SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話 ,就可以自己編寫配置文件進行相應配置,在我的上一篇博文SpringBoot原理分析(https://blog.csdn.net/One_L_Star/article/details/103056583)中,起步依賴spring-boot-starter-parent 中,有配置文件的引入,如下:

<resource>
    <filtering>true</filtering>
    <directory>${basedir}/src/main/resources</directory>
    <includes>
        <include>**/application*.yml</include>
        <include>**/application*.yaml</include>
        <include>**/application*.properties</include>
    </includes>
</resource>

可以看到,${basedir}/src/main/resources 表示資源的加載文件,資源文件包括下面三種格式的,也就是說,咱們在配置SpringBoot資源文件的時候都是以 application*.yml、application*.yaml、application*.properties文件格式,.yml 和 .yaml 文件相同,而且在配置的時候一般都以 application 命名,所以SpringBoot配置文件可以歸爲以下兩種:

  • application.properties
  • application.yml(application.yaml)

1. application.properties 配置文件

咱們可以創建 application.properties 配置文件去覆蓋 SpringBoot 的默認配置,可以在resources 文件夾下創建 application.properties 文件,這裏就以手動配置 Tomcat 端口去覆蓋SpringBoot 默認配置爲例,我們知道 Tomcat 默認打開端口是8080,咱們可以通過 application.properties 配置文件去修改這個默認配置:

server.port=8888

添加配置之後,運行項目

properties 文件是以鍵值對的形式編寫,可以看到,通過修改application.properties 配置文件,已經將 Tomcat 端口改爲 8888,覆蓋了之前的配置,由於 properties 文件在以往用的也比較多,較爲常見,這裏就不做過多講述,主要還是對 yml 配置文件進行學習。

2. application.yml(application.yaml) 配置文件

YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。YML文件的擴展名可以使用.yml或者.yaml。

【1】yml配置文件語法

yml 的配置可以分爲下面幾種,我們先在 resources 文件夾下面創建 application.yml 配置文件

  • 配置普通數據
  • 配置對象數據
  • 配置Map數據
  • 配置數組數據

配置普通數據:

  • 語法: key: value
  • eg:
name: onestar

注意:value前面有一個空格

配置對象數據:

  • 語法1:
    • key:
          key1: value1
          key2: value2
  • 語法2:
    • key: {key1: value1,key2: value2}
  • eg:
person:
    name: oneStar
    age: 18
    addr: yichun


#或者
person: {name: oneStar,age: 18,addr: yihcun}

注意:key1前面的空格個數不限定,在yml語法中,相同縮進代表同一個級別

配置Map數據:

  • 配置Map數據和配置對象數據相同
  • eg:
map:
    key1: value1
    key2: value2

配置數組數據:

  • 語法1
    • key:
          - value1
          - value2
  • 語法2
    • key: [value1,value2]
  • eg:
city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
  
#或者
city: [beijing,tianjin,shanghai,chongqing]

#集合中的元素是對象形式
student:
  - name: oneStar
    age: 18
    score: 100
  - name: twoStar
    age: 28
    score: 88
  - name: threeStar
    age: 38
    score: 90

注意:value1與之間的 - 之間存在一個空格

二、配置文件與配置類的屬性映射

配置文件中的配置,不管是 properties 文件還是 yml 文件,有一些配置 SpringBoot 會自動去識別,比如 server.port=8888 配置,但有一些我們自定義的配置,SpringBoot 並不能自動識別,怎樣才能讓 SpringBoot 認識自己配置的信息呢,這裏就有兩種方法:

  • 使用註解 @Value 映射

  • 使用註解 @ConfigurationProperties 映射

1、使用註解 @Value 映射

我們可以通過@Value註解將配置文件中的值映射到一個Spring管理的Bean的字段上,這裏以 yml 文件進行說明

  • application.yml 配置如下:
person:
  name: oneStar
  age: 18
  • 實體Bean代碼如下:
@Controller
public class QuickController {
    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private int age;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "name="+name+",age="+age;
    }
}

運行後,瀏覽器訪問地址:http://localhost:8080/quick 結果如下:  

2、使用註解 @ConfigurationProperties 映射

使用 Value 映射能夠精確的匹配到某一屬性,但如果有很多屬性,就帶來了不便,因此,還可以使用 @ConfigurationProperties 映射,通過註解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射

  • application.yml 配置如下:
person:
  name: oneStar
  age: 19
  • 實體Bean代碼如下:
@Controller
@ConfigurationProperties(prefix = "person")
public class QuickController {
    private String name;
    private int age;

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

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

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "name="+name+",age="+age;
    }
}

運行後,瀏覽器訪問地址:http://localhost:8080/quick 結果如下:  

注意:使用@ConfigurationProperties方式可以進行配置文件與實體字段的自動映射,但需要字段必須提供set方法纔可以,而使用@Value註解修飾的字段不需要提供set方法

 

 

下一篇:【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit

 


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