javascript
Spring Bootstrap中带有配置元数据的高级配置
在簡要介紹了配置元數(shù)據(jù)并涵蓋了我之前的文章《 在Spring Boot中使用配置元數(shù)據(jù)Pimp您的配置》中的基礎(chǔ)知識之后,是時候看看如何進(jìn)一步執(zhí)行此步驟并進(jìn)一步自定義配置了。 在本文中,我計劃提出對配置屬性的棄用,并討論各種值提供程序,以實(shí)現(xiàn)我所經(jīng)歷過的最舒適的應(yīng)用程序配置之一(在嘗試寫出完整內(nèi)容的同時,在配置中打錯字的時代已經(jīng)過去了。合格的類名或資源路徑–讓我們高興。
棄用財產(chǎn)
在進(jìn)行配置時,一種確定的招致麻煩的方法是引入突然的,無記錄的重大更改,這些更改可能導(dǎo)致應(yīng)用程序初始化或運(yùn)行時失敗。 Spring Boot引入了一個選項來標(biāo)記和記錄要棄用的屬性,以應(yīng)對這種情況。 秉承簡單聲明的精神,一旦準(zhǔn)備好新的(替換)屬性,您需要做的就是將deprecation JSON節(jié)點(diǎn)添加到property additional-spring-configuration-metadata.json文件的property描述中:
棄用財產(chǎn)
... {"name": "my.property","defaultValue": "something","deprecation": {"replacement": "my.new-property","reason": "This property is no longer needed."} } ...重新編譯項目后,支持此功能的工具將獲取更改并根據(jù)其設(shè)置反映出來。 下圖描繪了可用配置屬性的列表,其中已棄用的屬性已明確標(biāo)記。
如果您已經(jīng)在屬性文件中的某個位置使用了不推薦使用的屬性,則基于您使用的顏色主題和IDE,事情可能會變得有些奇怪。 我喜歡將IDEA與黑曜石主題結(jié)合使用,從而突出顯示以下文本。 本來可以做得更好,但是一旦您習(xí)慣了它,并理解每種顏色代表什么,就沒有問題了。 請記住一些注意事項。
您也可以更深入地了解為什么將此屬性標(biāo)記為不推薦使用。 只需調(diào)用此屬性的文檔(默認(rèn)情況下,通過在IDEA中按CTRL + Q),您將看到類似于此窗口的內(nèi)容,該窗口呈現(xiàn)了我先前在additional-spring-configuration-metadata.json文件中定義additional-spring-configuration-metadata.json 。 該查找適用于所有屬性,并且取決于您的代碼和其他配置元數(shù)據(jù)獲得的詳細(xì)程度和描述性。
鏈接到應(yīng)該替換/替換當(dāng)前屬性的屬性特別有用。 這意味著您可以使用意圖動作(在IDEA中,默認(rèn)情況下通過按ALT + ENTER調(diào)用)并執(zhí)行已淘汰屬性的單次替換。 萬一屬性值可以保持不變,您已經(jīng)做好了一切。 否則,您還需要更新該值。 挺整潔的!
價值提供者
值提供程序僅可用于手動提供的提示(使用文件additional-spring-configuration-metadata.json )。 Spring Boot將它們定義為一種描述屬性潛在值列表的方法,通過關(guān)聯(lián)提供程序以將明確定義的語義附加到屬性,以便工具可以根據(jù)項目的上下文發(fā)現(xiàn)潛在值列表。 這聽起來可能有點(diǎn)含糊,但是它確實(shí)是很酷的功能,它使您可以利用類層次結(jié)構(gòu),資源結(jié)構(gòu)或Spring自己的上下文中的幾乎所有方面。
類參考
讓我們從一個非常簡單但非常實(shí)用的東西開始-類引用提供程序。 如果我想根據(jù)應(yīng)用程序的部署位置來配置應(yīng)在應(yīng)用程序中使用哪種策略,我可以實(shí)施幾種策略實(shí)現(xiàn)并創(chuàng)建一個屬性來捕獲這一部分配置。 我的每個策略都實(shí)現(xiàn)一個IStrategy接口。 通過在hints additional-spring-configuration-metadata.json文件的hints部分中提供一個簡單的提供程序聲明,我可以大大簡化該屬性的填寫。
類引用的例子
...{"name": "my.strategy","providers": [{"name": "class-reference","parameters": {"target": "com.jakubstas.s3downloader.strategy.IStrategy"}}]} ...更新手動輸入的元數(shù)據(jù)并重新編譯項目后,策略屬性將顯示在可用屬性列表中。 這里沒有新內(nèi)容。
但是,當(dāng)涉及到值選擇時,可用值列表僅限于已定義接口的實(shí)現(xiàn)。 當(dāng)您需要配置要使用的類/實(shí)現(xiàn)或配置的任何其他方面時,這將很有用。
這樣做的好處是,您不必費(fèi)心為每個可用的類提供其他描述,因?yàn)槟匀豢梢允褂梦臋n查找操作(默認(rèn)情況下,在IDEA中按CTRL + Q)。 這使開發(fā)人員可以輕松瀏覽可用的選項,并非常舒適地選擇最適合的選項,而不會費(fèi)力。
處理為
請像處理另一個很酷的提供程序一樣進(jìn)行處理。 它允許您將屬性的類型替換為更高級的類型。 這只是一種幻想的表達(dá)方式,您希望您的IDE將此字符串屬性視為Resource,而不對可能不在類路徑中的任何給定框架類創(chuàng)建顯式依賴。 與先前討論的提供程序相比,此提供程序就像變色龍–它允許自動完成諸如字符集,mime類型,枚舉,語言環(huán)境或資源之類的東西,并且還支持集合的使用。
話雖如此,我們可能希望在我們的應(yīng)用程序中使用不同的條款和條件信息,并且還能夠在每個版本的不同版本之間進(jìn)行切換,而無需發(fā)布整個程序。 我的配置中引入了新屬性來支持此要求。 通過像在此代碼段中那樣在Additional additional-spring-configuration-metadata.json的hints部分中提供一個簡單的提供程序聲明,我將只能瀏覽我的資源并快速導(dǎo)航到要使用的文件。
將屬性作為資源處理
...{"name": "my.terms-and-conditions","providers": [{"name": "handle-as","parameters": {"target": "org.springframework.core.io.Resource"}}]} ...首先要介紹的是您要使用的資源類型的選擇(是的,它支持資源字符串前綴:))。
我想使用classpath資源,然后導(dǎo)航至文件。 由于您可能想將文件夾本身用作資源,因此需要自己提供文件分隔符。
其他
還有其他一些價值提供者值得一試,我將不像前兩個那樣詳細(xì)討論。 讓我們快速看一下我們還能使用什么:
- 任何
- 允許提供任何附加值。
- 記錄器名稱
- 自動完成有效的記錄器名稱。
- Spring Bean參考
- 自動完成當(dāng)前項目中的可用bean名稱。
- Spring資料名稱
- 自動完成項目中可用的Spring概要文件名稱。
有關(guān)更多信息,請參閱附錄B。
結(jié)論
這就是我在Spring Boot中關(guān)于配置元數(shù)據(jù)支持的全部內(nèi)容。 希望這兩篇文章能激發(fā)您對這項功能進(jìn)行自己的研究并嘗試一下。 老實(shí)說,設(shè)置起來并不難,它使您的生活更輕松。 盡管這不是解決應(yīng)用程序配置所有問題的萬能解決方案,但我還是愿意每天使用這種增量改進(jìn)。 您對這種配置方法有何經(jīng)驗(yàn)? 在評論部分讓我知道。
翻譯自: https://www.javacodegeeks.com/2016/02/advanced-config-configuration-meta-data-spring-bootstrap.html
總結(jié)
以上是生活随笔為你收集整理的Spring Bootstrap中带有配置元数据的高级配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吉利熊猫骑士微型电动车将于 9 月 15
- 下一篇: resteasy_RESTEasy教程第