springboot(3)——配置文件和自動配置原理詳細講解

原文地址html

目錄java

 

概述spring

1. 配置文件做用編程

2.配置文件位置數組

3.配置文件的定義服務器

3.1若是是定義普通變量(數字 字符串 布爾)app

3.2若是是定義對象、Map運維

3.3若是是定義數組dom

4.配置文件的使用spring-boot

4.1定義一個部門類和一個person類

4.2書寫配置文件

4.3將配置文件屬性的值綁定到指定類的屬性上

4.4加載指定位置的配置文件

5.配置文件中使用佔位符

6.Profile多環境配置

 

7.配置文件的位置

 

8.Springboot自動配置的原理


概述

Springboot開發中很重要的一句話就是約定大於配置,有不少配置都有默認值,咱們使用便可。可是若是要根據本身的需求替換默認配置的話,能夠經過配置文件修改。

1. 配置文件做用

主要用來修改Boot中相關默認的配置,有application.properties或者application.yml(application.yaml)兩種配置方式進行配置。

2.配置文件位置

SpringBoot默認會從Resources目錄下加載application.properties或application.yml(application.yaml)文件

3.配置文件的定義

對於application.properties配置文件,咱們只需經過以下相似的鍵值對進行配置相關參數便可,這裏主要看下yml方式要注意的地方

server.port=8080

在yml中如何定義配置,格式以下

server:
  port: 8080

k:(空格)v表示一對鍵值對(空格必須有);以空格的縮進來控制層級關係;只要是左對齊的一列數據,都是同一個層級的,

3.1若是是定義普通變量(數字 字符串 布爾)

直接使用k: v:書寫便可,好比 age: 14

若是是字符串,雙引號中的特殊字符會表達自己想表示的意思,單引號中的特殊字符將做爲普通字符輸出

name: "zhangsan \n lisi" 則輸出 zhangsan 換行lisi

name: 'zhangsan \n lisi'  則輸出 zhangsan \n lisi

3.2若是是定義對象、Map

Person:
  name: 李四
  age: 14
行內寫法
Person: {name: 李四,age: 14}

3.3若是是定義數組

用-值表示數組中的一個元素

pets:
  -cat
  -dog
行內寫法
pets: {cat,dog}

4.配置文件的使用

4.1定義一個部門類和一個person類

4.2書寫配置文件

person:
  id: 1
  name: lisi
  age: 12
  flag: true
  maps: {k1: v1,k2: v2}
  lists:
    - cat
    - dog
  department:
    id: 1
    name: 開發部門

4.3將配置文件屬性的值綁定到指定類的屬性上

要能綁定配置文件中的屬性,只有使用註解@Configuration或者@Component標註讓一個類成爲容器中的組件才能夠綁定屬性,無論是yml仍是properies配置文件,讀取裏面的值綁定到屬性的方式有兩種。

第一種:使用@ConfigurationProperties(prefix = "person")註解,其中的prefix表示這個前綴下面的全部屬性

第二種:使用@value()註解,括號中能夠是字面量、${配置文件中的值}、#{SpEL表達式},

測試

注意:

1. 使用@ConfigurationProperties方式能夠進行配置文件與實體字段的自動映射,但須要字段必須提供set方法才能夠,而使用@Value註解修飾的字段不須要提供set方法

2.綁定的時候導入下面依賴代碼自動提示

3.兩種方式比較

 

4.將上面yml文件的person配置換成properties配置,一樣綁定成功

person.id=1
person.name=zhangsan
person.age=13
person. maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.department.id=2
person.department.name=開發部門

 

4.4加載指定位置的配置文件

上面兩種方式讀取的配置文件默認都是全局的即application配置文件,可是全部的配置都寫在全局配置文件中就顯得很亂,能夠單獨本身的配置文件,使用@PropertySource註解

5.配置文件中使用佔位符

#可使用隨機數
person.id=1${random.uuid}
#可使用前面配置過的屬性
person.name=zhangsan${server.port}
#可使用本身配置過的屬性
person.age=13${person.id}

經常使用的隨機數

6.Profile多環境配置

當咱們的應用須要部署到不一樣的運行環境時,一些配置細節一般會有所不一樣,最簡單的好比日誌,生產環境下會將日誌級別設置爲warn或者更高級別的,並將日誌寫入日誌文件,可是開發環境下須要將日誌級別設置爲DUBUG,日誌輸出到控制檯便可,若是按照之前的作法,每次發佈的時候替換掉配置文件,這樣太麻煩了Springboot的Profile就解決了這一問題,命令帶參數就搞定

以下圖咱們能夠針對不一樣環境定義對應的配置文件

在主配置文件中經過spring.profiles.active=dev或者spring.profiles.active=pro選擇便可

除了上面這種選擇性引入對應的配置文件,常見的其餘幾種方式以下

1.運行的時候Edit配置文件

2.打包項目的時候

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

7.配置文件的位置

項目打包好之後,咱們可使用命令行參數的形式,啓動項目的時候來指定配置文件的新位置;指定配置文件和默
認加載的這些配置文件共同起做用造成互補配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

這種寫法會造成互補配置,特別是在運維的時候,能夠運行的時候使用外部一些配置。

好比我在服務器發佈了項目wxcrawler

要使用外置配置文件就很簡單了,在jar所在目錄新建config文件夾,而後放入配置文件,或者直接放配置文件在jar目錄

8.Springboot自動配置的原理

咱們回顧目錄4的知識,能夠看到咱們在配置文件中配置了Person相關屬性的值,要想使用這些值必需定義一個Person的組件,可是咱們直接可使用相似server.port=8080相關的配置,而不用定義相關的組件類,由於boot已經幫咱們定義了常見的組件配置類,咱們只需定義這配置類的屬性值,會自動綁定。那咱們到底能夠配置哪些相似server.port=8080參數呢,能夠查看官網說明

https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/htmlsingle/#common-application-properties

                         公衆號 java一號 更多java實戰項目資料、技術幹活。更重要的是小猿願成爲你編程路上的一個朋友!

 

用心寫好每一篇文章,真心對待每個讀者

文章首發地址: www.javayihao.top

首發公衆號: java一號

相關文章
相關標籤/搜索