javascript
在Spring Boot中使用配置元数据来配置您的配置
Spring Boot 1.3.0中發布了許多更新,但是其中一個對我很突出,因為我以前并不了解此更新,它的狀態使其成為一項真正有用的功能(不幸的是,撰寫本文時僅在Spring Boot中可用)這個)。 我正在談論配置元數據以及與框架/應用程序這一領域相關的處理。 正如我將進一步演示的那樣,有幾種方法可以使用它,并且該框架還允許您利用自動化處理的好處。 如果您覺得自己需要解決這些問題,請不要擔心–如果您想使用某些功能來精確調整設置,也可以使用手動輸入的方法。 讓我們談談配置。
Spring Boot中的配置元數據
面對現實吧-我們都去過那里。 您正在處理的應用程序必須是可配置的,但是,在涉及實際文檔時,情況會有些奇怪。 團隊通常有幾種方法來處理這項艱巨的任務。 無論是在項目Wiki中對其進行描述和管理,還是在屬性文件中部分注釋,以Javadoc注釋形式記錄下來,或者根本不存在,我們都可以認為這與所需的事務狀態相去甚遠。 這涉及到一些挑戰,例如使文檔可供所有涉眾使用(例如devops團隊),版本控制和保持最新(尤其是不向后兼容的更新),或者只是弄清楚哪些選項可用或已棄用,以及它們對應用程序意味著什么。
項目設置
第一步是設置一切。 如前所述,您將需要使用Spring Boot 1.3.0或更高版本以及特殊依賴項,以確保重新編譯包含元數據的文件,該文件稍后將由其他工具(如IDE)處理。 該工件稱為spring-boot-configruation-processor ,應將其標記為optional 。
pom.xml中的Spring Boot依賴關系
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.1.RELEASE</version><relativePath/> </parent><dependencies>...<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>... </dependencies>此設置的第二步是啟用配置屬性并實際創建一個包含它們的類。 這是一個相當簡單的任務(尤其是如果您有使用Spring Boot的經驗)。 我們將此類稱為MyProperties 。
啟用配置屬性的配置類
@Configuration @EnableConfigurationProperties({MyProperties.class}) public class ApplicationConfiguration {@Autowiredprivate MyProperties myProperties;public MyProperties getMyProperties() {return myProperties;}public void setMyProperties(MyProperties myProperties) {this.myProperties = myProperties;} }開箱即用的配置元數據
MyProperties類反映以單詞my開頭的屬性。 現在我們已經完成所有設置并準備就緒,讓我們看一下該機制在兩種最基本情況下如何工作。 考慮這兩個配置屬性–單個String屬性( property )和使用enum值的屬性( copyOption )。 這兩個屬性都是使用標準Javadoc進行描述的,如果使用StandardCopyOption ,則每個enum值都有其自己的Javadoc注釋。 Spring Boots對配置元數據的支持嘗試利用代碼中的最大值,因為開發人員希望它能正確注釋其配置屬性(在enum的情況下非常有用且方便)。
樣本配置屬性類
@ConfigurationProperties(prefix = "my") public class MyProperties {/*** String property used to configure my app.*/private String property;/*** Configuration for file operations.*/private StandardCopyOption copyOption;public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}public StandardCopyOption getCopyOption() {return copyOption;}public void setCopyOption(StandardCopyOption copyOption) {this.copyOption = copyOption;}}現在該看魔術發生了。 前面提到的Spring依賴項可確保在項目構建期間生成元數據。 為了從整個設置中獲得一些收益,您需要知道您的IDE如何支持此Spring Boot功能。 例如,據我所知,保存操作/事件上的Eclipse IDE觸發了一個構建,該構建負責保持元數據為最新。 對于IntelliJ IDEA,由于沒有保存/保存事件,您需要手動觸發構建。 構建結束后,您可以瀏覽target文件夾(如果使用maven)并查找新添加的文件target\classes\META-INF\spring-configuration-metadata.json 。 給定上面的代碼,您應該看到類似于以下內容:
target \ classes \ META-INF \ spring-configuration-metadata.json的內容
{"groups": [{"name": "my","type": "com.jakubstas.s3downloader.MyProperties","sourceType": "com.jakubstas.s3downloader.MyProperties"}],"properties": [{"name": "my.copy-option","type": "java.nio.file.StandardCopyOption","description": "Configuration for file operations.","sourceType": "com.jakubstas.s3downloader.MyProperties"},{"name": "my.property","type": "java.lang.String","description": "String property used to configure my app.","sourceType": "com.jakubstas.s3downloader.MyProperties"}],"hints": [] }現在,該文件可供讀取和處理的工具使用,也可供團隊成員檢查以查看如何配置應用程序。 就是說,一旦我在IntelliJ IDEA編輯器中打開application.properties并開始為每個屬性輸入前綴,就會被熟悉的自動代碼完成窗口所歡迎,該窗口具有我的每個屬性用于什么的概念(基于在Javadoc注釋上):
對于enum屬性,我還可以看到每個enum的值及其各自的Javadoc注釋:
默認值選擇
配置文檔的最基本用例之一是為您的配置屬性選擇一個合理的默認值,以便盡可能容易地配置您的應用程序。 讓我們看一下如何在此設置中實現這一目標。 為了允許任何手動輸入spring-configuration-metadata.json file ,開發人員必須首先創建一個新的單獨文件,然后由構建過程使用。 這是另一個名為Additional additional-spring-configuration-metadata.json json文件,應該在META-INF文件夾中創建,并且必須遵循附錄B.配置元數據中描述的語法。
這樣,一旦確定了默認值和可用選項(我想提供兩個預定義的選項,但仍允許在String屬性中使用任何其他String值),就可以使用以下內容創建該文件:
Additional-spring-configuration-metadata.json的內容
{"properties": [{"name": "my.copy-option","type": "java.lang.String","sourceType": "java.nio.file.StandardCopyOption","defaultValue": "replace_existing"},{"name": "my.property","defaultValue": "something"}],"hints": [{"name": "my.property","values": [{"value": "nothing","description": "Does nothing."},{"value": "something","description": "Does something."}]}] }這幾乎可以達到預期的效果,并且已經可以在某些Spring Boot依賴項中看到。 對于String屬性,兩個選項均帶有各自的描述。 默認選項已鎖定。
enum屬性的行為略有不同,因為IDE不會固定該選項,而是將其放在列表的頂部。
最后,讓我們看一看尚未選擇任何特定屬性的內容。 在這種情況下,這兩個屬性均顯示其對Javadoc的描述及其默認值。
結論
這是對如何使配置更加出色的簡短介紹。 這篇文章只是放棄了可能實現的目標,并且仍然設法顯示出此功能的巨大潛力。 我鼓勵您嘗試一下此功能,親自看看這種設置是否對您和您的團隊都有效。 在下一篇文章中,我將詳細介紹此配置支持。 敬請關注!
翻譯自: https://www.javacodegeeks.com/2016/01/pimp-config-configuration-meta-data-spring-boot.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在Spring Boot中使用配置元数据来配置您的配置的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 宁国房产备案系统(宁国房产备案)
 - 下一篇: 安卓模拟器云手机(安卓模拟器云)