當前位置:編程學習大全網 - 源碼下載 - [基本系列]配置屬性您在配置綁定中不知道的內容

[基本系列]配置屬性您在配置綁定中不知道的內容

在SpringBoot項目中,可以說獲取配置屬性是壹件非常簡單的事情。在aplication.yml文件中寫入配置後,我們可以通過@Value註釋直接綁定並獲取。此外,我們還可以借助@ configurationproperties將結構化配置綁定到POJO,然後將其用於項目。所以在使用的時候,不知道大家有沒有想過?

如果以上都清楚了,那麽這篇文章的幫助就不會特別大;如果妳對此有什麽疑問,就壹壹解答。

本項目是在Spring Boot 2.2.1的幫助下開發的。發布+Maven 3 . 5 . 3+思路。

下面是核心的pom.xml(源代碼可在文末獲取)

假設我們現在定制了壹個功能模塊,裏面包含了壹些我們已經定義好的參數,支持通過yaml配置文件註入。

首先,我們可以定義壹個配置類BindConfig。

請註意,上面註釋中的prefix = hhui.bind只是表示會讀取配置文件中帶有前綴hhui.bind的屬性,然後依次賦給這個類。

相應的配置文件如下

需要註意的事項

關於上面的最後壹點,這意味著我們可以聲明壹個內部類來綁定自動配置類中的配置信息,如下所示。

我們通過@ConfigurationProperties修飾配置類後,會直接生效嗎?壹般來說,有三種方法可以讓它工作。

直接在配置類上添加@Component、@Configuration等註釋,讓Spring容器掃描加載。

使用該方法時,需要註意自動掃描包路徑中的配置類,否則可能掃描不到(主要是作為第三方jar包提供服務時,可能掃描不到)。

將其視為普通bean,通過bean註冊的方式實現,也是壹種可選方案。壹般實現方法如下。

在配置類上,添加這個註釋後,可以實現配置註冊,比如常用的使用手勢。

以上三種註冊方式中,前兩種思路是將配置類作為bean,第三種實現思路與bean的主動註冊壹致(所以如果想實現bean的主動註冊,可以考慮其實現邏輯)。

如果在我們的配置中,最初期望接收壹個int類型的參數,但它實際上是作為壹個非整數填充的,該怎麽辦?

比如前面的配置類,我們實際的配置文件會填充age 18y,看看最後會怎麽樣。

簡單演示,直接在啟動類測試。

參數異常後,直接啟動失敗。如果對參數要求不那麽嚴格,則允許失敗。我們可以設置ignoreInvalidFields = true。

再次執行後,會發現啟動正常,輸出如下

註意上面的年齡,因為傳入的非法參數為null。

解釋

與默認值+ignoreininvalidfields結合使用,以支持配置的最大可用性:

再次執行輸出,例如

除了基本類型之外,常用配置是否可以嵌套自定義對象,非基本類型如何解析?

我們定義壹個新的Pwd類。

然後展開BindConfig。

此時,mainPwd對應的yaml配置文件可以設置如下。

從上面的介紹可以看出,支持自定義POJO類,使用手勢沒有區別。

此外,還舉例說明了列表和地圖的使用。

我們上面定義的Pwd類主要是用setter方法把匹配的屬性塞進去。如果我的配置是json字符串,可以註入到POJO類中嗎?

相應的Jwt類如下

此時,如果要實現上述配置解析,可以通過實現org的接口來支持。spring framework . core . convert . converter,並通過註釋@ configurationPropertiesBinding指明這是壹個配置屬性轉換類。沒有此註釋,它將不會生效。

解釋

使用自定義配置解析規則時,請註意兩點。

Spring提供了壹些默認的配置解析規則,比如

對應的類中沒有該屬性的配置類會發生什麽情況?

例如,對於以前的BindConfig,沒有notExist屬性,但這是在配置文件中添加的。

實測後發現沒有影響。通過查看@ConfigurationProperties註釋的成員,發現可以設置ignoreUnknownFields=false,字面意思是存在無法識別的成員,不會稍有錯誤,但在實際測試中並不生效。

參數驗證可以說是常見案例。比如年齡之前的配置,這個參數基本不允許為負。如果有必要驗證參數,我們可以用@Validated來驗證。

添加pom相關性

然後在配置類上添加@Validated,然後就可以在需要驗證的字段上添加相應的限制。

如果我們設置的年齡參數不符合上述條件

重新測試將發現以下報告的錯誤

通常在Spring開發過程中,在yaml文件中添加配置時,會有壹個非常友好的帶有idea的提示,可以非常友好的完成參數配置。

那麽我們的自定義參數應該怎麽做才能達到這個效果呢?

在文章開頭添加依賴關系

添加完以上依賴項後,打包mvn clean包,然後妳會發現壹個spring-configuration-metadata。META-INF下的JSON。

然後會自動完成。

解釋

Idea推薦添加插件Spring Assistant,它支持非常友好的配置註入。

本文介紹了@ConfigurationProperties修改POJO類實現配置綁定,可以通過將該類聲明為普通bean或者使用@EnableConfigurationProperties進行註冊。

配置參數時需要註意的是,如果參數類型不壹致,項目將無法啟動。您可以通過設置配置屬性# ignoreininvalidfields = true來避免這種情況。

通過實現接口轉換器+@ configurationPropertiesBinding,可以定義參數分析轉換規則,實現各種姿態的參數分析。

自動提示支持配置也比較簡單。添加org.springframework.boot的依賴項:spring-boot-configuration-processor,打包後META-INF中會多壹個json文件spring-configuration-metadata . JSON。

項目源代碼

系列博客文章

還不如相信所有的書。以上內容純屬陳述。由於個人能力有限,難免有疏漏和錯誤。如果發現bug或者有更好的建議,歡迎批評指正。我很感激。

下面是壹個布滿灰塵的個人博客,記錄了學習和工作中的所有博文。歡迎參觀。

  • 上一篇:怎麽用DELPHI實現後臺按鍵
  • 下一篇:感恩祖國的作文3000字左右。
  • copyright 2024編程學習大全網