當前位置:
首頁 > 最新 > Spring Boot 配置文件 yml與properties

Spring Boot 配置文件 yml與properties

1、配置文件

SpringBoot使用一個全局的配置文件,配置文件名是固定的;

?application.properties

?application.yml

配置文件的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好;

官方語法規

YAML(YAML Ain』t Markup Language)

YAML A Markup Language:是一個標記語言

YAML isn』t Markup Language:不是一個標記語言;

標記語言:

以前的配置文件;大多都使用的是xxxx.xml文件;

YAML:以數據為中心,比json、xml等更適合做配置文件;

YAML:配置例子

相當於XML:


k:(空格)v:表示一對鍵值對(空格必須有);

以空格的縮進來控制層級關係;只要是左對齊的一列數據,都是同一個層級的

屬性和值也是大小寫敏感;


字面量:普通的值(數字,字元串,布爾)

k: v:字面直接來寫;

字元串默認不用加上單引號或者雙引號;

「」:雙引號;不會轉義字元串裡面的特殊字元;特殊字元會作為本身想表示的意思

name: 「zhangsan
lisi」:輸出;zhangsan 換行 lisi

」:單引號;會轉義特殊字元,特殊字元最終只是一個普通的字元串數據

name: 『zhangsan
lisi』:輸出;zhangsan
lisi

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

k: v:在下一行來寫對象的屬性和值的關係;注意縮進

對象還是k: v的方式

行內寫法:

數組(List、Set):

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

行內寫法


配置文件 application.yml

javaBean:

使用 @ConfigurationProperties 註解在idea會給我們提示,需要導入配置文件處理器。

我們點擊,會調到springboot 的官方文檔。

在pom導入配置文件處理器,以後編寫配置就有提示了:

1、properties配置文件在idea中默認utf-8可能會亂碼

調整

2、@Value獲取值和@ConfigurationProperties獲取值比較

@Value是以前spring底層的,使用@Value需要一個一個參數指定,@ConfigurationProperties批量注入配置文件中的屬性。更多比較如下:

配置文件yml還是properties他們都能獲取到值;

如果說,我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value;

如果說,我們專門編寫了一個javaBean來和配置文件進行映射,我們就直接使用@ConfigurationProperties;

3、配置文件注入值數據校驗

@Validated

@ConfigurationProperties支持JSR303數據校驗,@Value不支持JSR303數據校驗。

4、@PropertySource&@ImportResource&@Bean

@PropertySource:載入指定的配置文件;

person.properties

Person.java

@ImportResource:導入Spring的配置文件,讓配置文件裡面的內容生效;

Spring Boot裡面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動識別;

想讓Spring的配置文件生效,載入進來;@ImportResource標註在一個配置類上

不來編寫Spring的配置文件

SpringBoot推薦給容器中添加組件的方式;推薦使用全註解的方式

1、配置類@Configuration——>Spring配置文件

2、使用@Bean給容器中添加組件


可以在配置文件中引用前面配置過的屬性(優先順序前面配置過的這裡都能用)。

$ 來指定找不到屬性時的默認值


Profile是Spring對不同環境提供不同配置功能的支持,可以通過激活、 指定參數等方式快速切換環境 。


我們在主配置文件編寫的時候,文件名可以是 application-.properties/yml

比如開發環境:application-dev.properties

生產環境 :application-prod.properties

默認使用application.properties的配置;

1、在配置文件application.properties中指定 spring.profiles.active=dev

2、命令行:

可以直接在測試的時候,配置傳入命令行參數

3、虛擬機參數;


springboot 啟動會掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認配置文件

–file:./config/

–file:./

–classpath:/config/

–classpath:/

優先順序由高到底,高優先順序的配置會覆蓋低優先順序的配置;

SpringBoot會從這四個位置全部載入主配置文件;互補配置;

項目打包好以後,我們可以使用命令行參數的形式,啟動項目的時候來指定配置文件的新位置;指定配置文件和默認載入的這些配置文件共同起作用形成互補配置;

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar –spring.config.location=G:/application.properties

這個對運維方面起到很大作用


SpringBoot也可以從以下位置載入配置; 優先順序從高到低;高優先順序的配置覆蓋低優先順序的配置,所有的配置會形成互補配置

1.命令行參數

所有的配置都可以在命令行上進行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar –server.port=8087 –server.context-path=/abc

多個配置用空格分開; –配置項=值

2.來自java:comp/env的JNDI屬性

3.Java系統屬性(System.getProperties())

4.操作系統環境變數

5.RandomValuePropertySource配置的random.*屬性值

由jar包外向jar包內進行尋找;

優先載入帶profile

6.jar包外部的application-.properties或application.yml(帶spring.profile)配置文件

7.jar包內部的application-.properties或application.yml(帶spring.profile)配置文件

再來載入不帶profile

8.jar包外部的application.properties或application.yml(不帶spring.profile)配置文件

9.jar包內部的application.properties或application.yml(不帶spring.profile)配置文件

10.@Configuration註解類上的@PropertySource

11.通過SpringApplication.setDefaultProperties指定的默認屬性

所有支持的配置載入來源;

參考官方文檔


配置文件到底能寫什麼?怎麼寫?自動配置原理;

官方部分截圖,更多配置請參考官網

配置文件能配置的屬性參照


1)、SpringBoot啟動的時候載入主配置類,開啟了自動配置功能 @EnableAutoConfiguration

2)、@EnableAutoConfiguration 作用:

利用EnableAutoConfigurationImportSelector給容器中導入一些組件?

可以查看selectImports()方法的內容;

List configurations = getCandidateConfigurations(annotationMetadata, attributes);獲取候選的配置

將 類路徑下 META-INF/spring.factories 裡面配置的所有EnableAutoConfiguration的值加入到了容器中;

每一個這樣的 xxxAutoConfiguration類都是容器中的一個組件,都加入到容器中;用他們來做自動配置;

3)、每一個自動配置類進行自動配置功能;

4)、以HttpEncodingAutoConfiguration(Http編碼自動配置)為例解釋自動配置原理;

下面代碼是HttpEncodingAutoConfiguration部分源碼

根據當前不同的條件判斷,決定這個配置類是否生效?

一但這個配置類生效;這個配置類就會給容器中添加各種組件;這些組件的屬性是從對應的properties類中獲取的,這些類裡面的每一個屬性又是和配置文件綁定的;

5)、所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝者『;配置文件能配置什麼就可以參照某個功能對應的這個屬性類

精髓:

1)、SpringBoot啟動會載入大量的自動配置類

2)、我們看我們需要的功能有沒有SpringBoot默認寫好的自動配置類;

3)、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件有,我們就不需要再來配置了)

4)、給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們就可以在配置文件中指定這些屬性的值;

xxxxAutoConfigurartion:自動配置類;

給容器中添加組件

xxxxProperties:封裝配置文件中相關屬性;


自動配置類必須在一定的條件下才能生效;

我們怎麼知道哪些自動配置類生效;

我們可以通過啟用 debug=true 屬性(在配置文件中加入);來讓控制台列印自動配置報告,這樣我們就可以很方便的知道哪些自動配置類生效;


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java技術會所 的精彩文章:

Spring Boot 入門學習

TAG:java技術會所 |