欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

@ConfigurationProperties注解使用姿勢是什么

這篇文章給大家介紹@ConfigurationProperties注解使用姿勢是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供墊江企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站制作、做網(wǎng)站、html5、小程序制作等業(yè)務。10年已為墊江眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。

在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數(shù)配置在 application.properties 或 application.yml 文件中,通過 @ConfigurationProperties 注解,我們可以方便的獲取這些參數(shù)值

使用 @ConfigurationProperties 配置模塊

假設我們正在搭建一個發(fā)送郵件的模塊。在本地測試,我們不想該模塊真的發(fā)送郵件,所以我們需要一個參數(shù)來「開關(guān)」 disable 這個功能。另外,我們希望為這些郵件配置一個默認的主題,這樣,當我們查看郵件收件箱,通過郵件主題可以快速判斷出這是測試郵件

在 application.properties 文件中創(chuàng)建這些參數(shù): @ConfigurationProperties注解使用姿勢是什么

我們可以使用 @Value 注解或著使用 Spring Environment bean 訪問這些屬性,是這種注入配置方式有時顯得很笨重。我們將使用更安全的方式(@ConfigurationProperties )來獲取這些屬性

@ConfigurationProperties注解使用姿勢是什么

@ConfigurationProperties 的基本用法非常簡單:我們?yōu)槊總€要捕獲的外部屬性提供一個帶有字段的類。請注意以下幾點:

  • 前綴定義了哪些外部屬性將綁定到類的字段上

  • 根據(jù) Spring Boot 寬松的綁定規(guī)則,類的屬性名稱必須與外部屬性的名稱匹配

  • 我們可以簡單地用一個值初始化一個字段來定義一個默認值

  • 類本身可以是包私有的

  • 類的字段必須有公共 setter 方法

Spring 寬松綁定規(guī)則 (relaxed binding)

Spring使用一些寬松的綁定屬性規(guī)則。因此,以下變體都將綁定到 hostName 屬性上:

@ConfigurationProperties注解使用姿勢是什么

如果我們將 MailModuleProperties 類型的 bean 注入到另一個 bean 中,這個 bean 現(xiàn)在可以以類型安全的方式訪問那些外部配置參數(shù)的值。

但是,我們?nèi)匀恍枰?Spring 知道我們的 @ConfigurationProperties 類存在,以便將其加載到應用程序上下文中( 面試還不知道 BeanFactory 和 ApplicationContext 的區(qū)別?)

激活 @ConfigurationProperties

對于 Spring Boot,創(chuàng)建一個 MailModuleProperties 類型的 bean,我們可以通過下面幾種方式將其添加到應用上下文中

首先,我們可以通過添加 @Component 注解讓 Component Scan 掃描到 @ConfigurationProperties注解使用姿勢是什么

很顯然,只有當類所在的包被 Spring @ComponentScan 注解掃描到才會生效,默認情況下,該注解會掃描在主應用類下的所有包結(jié)構(gòu)

我們也可以通過 Spring 的 Java Configuration 特性實現(xiàn)同樣的效果: @ConfigurationProperties注解使用姿勢是什么

只要 MailModuleConfiguration 類被 Spring Boot 應用掃描到,我們就可以在應用上下文中訪問 MailModuleProperties bean

我們還可以使用 @EnableConfigurationProperties 注解讓我們的類被 Spring Boot 所知道,在該注解中其實是用了@Import(EnableConfigurationPropertiesImportSelector.class) 實現(xiàn),大家可以看一下 @ConfigurationProperties注解使用姿勢是什么

激活一個 @ConfigurationProperties 類的最佳方式是什么?

所有上述方法都同樣有效。然而,我建議模塊化你的應用程序,并讓每個模塊提供自己的@ConfigurationProperties 類,只提供它需要的屬性,就像我們在上面的代碼中對郵件模塊所做的那樣。這使得在不影響其他模塊的情況下重構(gòu)一個模塊中的屬性變得容易。

因此,我不建議在應用程序類本身上使用 @EnableConfigurationProperties,如許多其他教程中所示,是在特定于模塊的 @Configuration 類上使用@EnableConfigurationProperties,該類也可以利用包私有的可見性對應用程序的其余部分隱藏屬性。

無法轉(zhuǎn)換的屬性

如果我們在 application.properties 屬性上定義的屬性不能被正確的解析會發(fā)生什么?假如我們?yōu)樵緫摓椴紶栔档膶傩蕴峁┑闹禐?'foo': @ConfigurationProperties注解使用姿勢是什么

默認情況下,Spring Boot 將會啟動失敗,并拋出異常:

Failed to bind properties under 'myapp.mail.enabled' to java.lang.Boolean:

    Property: myapp.mail.enabled
    Value: foo
    Origin: class path resource [application.properties]:1:20
    Reason: failed to convert java.lang.String to java.lang.Boolean

當我們?yōu)閷傩耘渲缅e誤的值時,而又不希望 Spring Boot 應用啟動失敗,我們可以設置 ignoreInvalidFields 屬性為 true (默認為 false) @ConfigurationProperties注解使用姿勢是什么

這樣,Spring Boot 將會設置 enabled 字段為我們在 Java 代碼里設定好的默認值。如果我們沒有設置默認值,enabled 將為 null,因為這里定義的是 boolean 的包裝類 Boolean

未知的屬性

和上面的情況有些相反,如果我們在 application.properties 文件提供了 MailModuleProperties 類不知道的屬性會發(fā)生什么? @ConfigurationProperties注解使用姿勢是什么

默認情況下,Spring Boot 會忽略那些不能綁定到 @ConfigurationProperties 類字段的屬性

然而,當配置文件中有一個屬性實際上沒有綁定到 @ConfigurationProperties 類時,我們可能希望啟動失敗。也許我們以前使用過這個配置屬性,但是它已經(jīng)被刪除了,這種情況我們希望被觸發(fā)告知手動從 application.properties 刪除這個屬性

為了實現(xiàn)上述情況,我們僅需要將 ignoreUnknownFields 屬性設置為 false (默認是 true) @ConfigurationProperties注解使用姿勢是什么

現(xiàn)在,應用啟動時,控制臺會反饋我們異常信息

Binding to target [Bindable@cf65451 type = com.example.configurationproperties.properties.MailModuleProperties, value = 'provided', annotations = array<Annotation>[@org.springframework.boot.context.properties.ConfigurationProperties(value=myapp.mail, prefix=myapp.mail, ignoreInvalidFields=false, ignoreUnknownFields=false)]] failed:

    Property: myapp.mail.unknown-property
    Value: foo
    Origin: class path resource [application.properties]:3:29
    Reason: The elements [myapp.mail.unknown-property] were left unbound.

棄用警告??(Deprecation Warning) ignoreUnknownFields 在未來 Spring Boot 的版本中會被標記為 deprecated,因為我們可能有兩個帶有 @ConfigurationProperties 的類,同時綁定到了同一個命名空間 (namespace) 上,其中一個類可能知道某個屬性,另一個類卻不知道某個屬性,這樣就會導致啟動失敗

啟動時校驗 @ConfigurationProperties

如果我們希望配置參數(shù)在傳入到應用中時有效的,我們可以通過在字段上添加 bean validation 注解,同時在類上添加 @Validated 注解 @ConfigurationProperties注解使用姿勢是什么

如果我們忘記在 application.properties 文件設置 enabled 屬性,并且設置 defaultSubject 為空 @ConfigurationProperties注解使用姿勢是什么

應用啟動時,我們將會得到 BindValidationException

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'myapp.mail' to com.example.configurationproperties.properties.MailModuleProperties failed:

    Property: myapp.mail.enabled
    Value: null
    Reason: must not be null

    Property: myapp.mail.defaultSubject
    Value: null
    Reason: must not be empty

當然這些默認的驗證注解不能滿足你的驗證要求,我們也可以自定義注解

如果你的驗證邏輯很特殊,我們可以實現(xiàn)一個方法,并用 @PostConstruct 標記,如果驗證失敗,方法拋出異常即可, 關(guān)于 @PostConstruct,可以查看 Spring Bean 的生命周期,我從哪里來?

復雜屬性類型

多數(shù)情況,我們傳遞給應用的參數(shù)是基本的字符串或數(shù)字。但是,有時我們需要傳遞諸如 List 的數(shù)據(jù)類型

List 和 Set

假如,我們?yōu)猷]件模塊提供了一個 SMTP 服務的列表,我們可以添加該屬性到 MailModuleProperties 類中 @ConfigurationProperties注解使用姿勢是什么

我們有兩種方式讓 Spring Boot 自動填充該 list 屬性

application.properties

在 application.properties 文件中以數(shù)組形式書寫 @ConfigurationProperties注解使用姿勢是什么

application.yml

YAML 本身支持 list 類型,所以可以在 application.yml 文件中添加: @ConfigurationProperties注解使用姿勢是什么

set 集合也是這種方式的配置方式,不再重復書寫。另外YAML 是更好的閱讀方式,層次分明,所以在實際應用中更推薦大家使用該種方式做數(shù)據(jù)配置

Duration

Spring Boot 內(nèi)置支持從配置參數(shù)中解析 durations (持續(xù)時間),官網(wǎng)文檔 給出了明確的說明 @ConfigurationProperties注解使用姿勢是什么

我們既可以配置毫秒數(shù)數(shù)值,也可配置帶有單位的文本: @ConfigurationProperties注解使用姿勢是什么

官網(wǎng)上已明確說明,配置 duration 不寫單位,默認按照毫秒來指定,我們也可已通過 @DurationUnit 來指定單位: @ConfigurationProperties注解使用姿勢是什么

常用單位如下:

  • ns for nanoseconds (納秒)

  • us for microseconds (微秒)

  • ms for milliseconds (毫秒)

  • s for seconds (秒)

  • m for minutes (分)

  • h for hours (時)

  • d for days (天)

DataSize

與 Duration 的用法一毛一樣,默認單位是 byte (字節(jié)),可以通過 @DataSizeUnit 單位指定: @ConfigurationProperties注解使用姿勢是什么

添加配置 @ConfigurationProperties注解使用姿勢是什么

但是,我測試的時候打印出來結(jié)果都是以 B (bytes) 來顯示

常見單位如下:

  • B for bytes

  • KB for kilobytes

  • MB for megabytes

  • GB for gigabytes

  • TB for terabytes

自定義類型

有些情況,我們想解析配置參數(shù)到我們自定義的對象類型上,假設,我們我們設置最大包裹重量: @ConfigurationProperties注解使用姿勢是什么

在 MailModuleProperties 中添加 Weight 屬性 @ConfigurationProperties注解使用姿勢是什么

我們可以模仿 DataSize 和 Duration 創(chuàng)造自己的 converter (轉(zhuǎn)換器) @ConfigurationProperties注解使用姿勢是什么

將其注冊到 Spring Boot 上下文中 @ConfigurationProperties注解使用姿勢是什么

@ConfigurationPropertiesBinding 注解是讓 Spring Boot 知道使用該轉(zhuǎn)換器做數(shù)據(jù)綁定

使用 Spring Boot Configuration Processor 完成自動補全

我們向項目中添加依賴:

Maven

@ConfigurationProperties注解使用姿勢是什么

Gradle

@ConfigurationProperties注解使用姿勢是什么

重新 build 項目之后,configuration processor 會為我們創(chuàng)建一個 JSON 文件: @ConfigurationProperties注解使用姿勢是什么

這樣,當我們在 application.properties 和 application.yml 中寫配置的時候會有自動提醒: @ConfigurationProperties注解使用姿勢是什么

標記配置屬性為 Deprecated

configuration processor 允許我們標記某一個屬性為 deprecated @ConfigurationProperties注解使用姿勢是什么

我們可以通過添加 @DeprecatedConfigurationProperty 注解到字段的 getter 方法上,來標示該字段為 deprecated,重新 build 項目,看看 JSON 文件發(fā)生了什么? @ConfigurationProperties注解使用姿勢是什么

當我們再編寫配置文件時,已經(jīng)給出了明確 deprecated 提示: @ConfigurationProperties注解使用姿勢是什么

總結(jié)

Spring Boot 的 @ConfigurationProperties 注解在綁定類型安全的 Java Bean 時是非常強大的,我們可以配合其注解屬性和 @DeprecatedConfigurationProperty 注解獲取到更友好的編程方式,同時這樣讓我們的配置更加模塊化。

附加說明

以為 @ConfigurationProperties 注解滿足我們的全部需要了嗎?其實不然,Spring 官網(wǎng)明確給出了該注解和 @Value 注解的對比: @ConfigurationProperties注解使用姿勢是什么

如果使用 SpEL 表達式,我們只能選擇 @Value 注解

另外我之前在閱讀 RabbitMQ 源碼時,發(fā)現(xiàn) RabbitProperties 類充分的利用了 @ConfigurationProperties 注解特性:

  • deprecated @ConfigurationProperties注解使用姿勢是什么

  • Duration @ConfigurationProperties注解使用姿勢是什么

  • Enum

  • 嵌套屬性

感覺自己后知后覺,最近在思考,為什么小時候要閱讀和背誦古詩詞,文言文等經(jīng)典,因為這樣寫文章就可以輕松熟練的引用經(jīng)典。技術(shù)也一樣,各種框架的源碼就是學生時代的古詩詞和文言文,我們要多多查看閱讀,甚至背誦編程思想,這樣就可以寫出越來越優(yōu)雅的代碼

關(guān)于 @ConfigurationProperties 注解的使用,這里推薦 RabbitMQ Github 源碼,只需看這一個類就可以,知道怎樣充分利用這個注解.

關(guān)于@ConfigurationProperties注解使用姿勢是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章名稱:@ConfigurationProperties注解使用姿勢是什么
URL標題:http://aaarwkj.com/article2/gghgoc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、響應式網(wǎng)站、云服務器營銷型網(wǎng)站建設、搜索引擎優(yōu)化、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
中文字幕日韩人妻av| 午夜视频免费在线观看| 婷婷色综合一区二区三区| 日韩国产精品视频二区| 蜜臀av一区二区在线观看| 四虎在线观看最新入口| 在线一区免费视频播放| 九九在线免费视频蜜臀| 久久精品国产亚洲av制服| 久久视热频这里只有精品| 日韩综合欧美激情另类| 国产精品粗又长一区| 欧美人与性禽动交情品| 丰满多毛熟妇的大阴户| 国产美女作爱视频网站| 91这里只有精品在线观看| 色婷婷激情一区二区三区| 国产三级国产精品国产国在线观看| 麻豆AV一区二区三区久久| 中文字幕精品一区二区三区精品| 日日摸夜夜添添出白浆| 国产精品国产三级国产不卡| 精品国产一区av在线| 高h视频在线播放观看| 99精品欧美一区二区三区视频| 亚洲综合中文字幕久久网址| av中文字幕乱码在线看| 国产激情久久久久久久久久久| 九九九热视频这里只有精品| 亚洲国产欧美日韩久久| 久久精品熟女亚洲av韩国| 久久国产精品久久国产精品| 国产激情在线四五区观看| 99热精品成人免费观看| 亚洲欧美日韩激情另类| 国产原创传媒在线观看| 国产日韩综合精品一区| 乱熟av一区二区三区| 国产精品夜色一区二区三区不卡| 免费国产午夜福利在线| 亚洲av手机在线观看一区|