ConditionalOnProperty 這個註解,可以用於控制某個業務組件,是否開啟。
當我們在配置文件中加上enabled: true, 開啟組件, 沒有配置,默認關閉組件
這樣我們可以定製化一個通用的模塊,它是開,還是關,從而達到充分復用代碼的目的。
比如我們封裝好的一個核心Lib, 裡面有各種MongoDB, Redis, Mysql ,還有各種外部服務,比如發郵件,發簡訊。
通常我們一個新業務來了,我總是希望能復用這些基礎代碼類庫,但是如果直接引入進來,那就要加一萬條配置,煩的一筆。
所以我們就利用了ConditionalOnProperty註解,實現了定製化,可以開、關業務組件。
比如我需要發郵件的時候,我就配置文件加一項,如果不需要,就關掉。
我們看一下配置長什麼樣子,在application.yml配置中
這裡有個JDBC配置, 現在是開啟狀態。
我們看代碼中
這個組件裡面就用到了@ConditionalOnProperty註解,這個class裡面有很多Bean,如果條件不滿足,它就不會被啟動加載, 當需要的時候,你只需要把參數改一下,就可以用了。
關於ConditionalOnProperty的規則,可以查看官方注釋說明,以及示例。
@Conditional檢查指定的屬性是否具有特定值。 默認情況下,屬性必須存在於環境中,並且不等於false。 具有havingValue()和matchIfMissing()屬性允許進行進一步的自定義。
具有havingValue()屬性可用於指定該屬性應具有的值。 下表顯示條件何時根據屬性值和havingValue()屬性匹配:
如果該屬性根本不包含在環境中,則請查詢matchIfMissing()屬性。 默認情況下,缺少的屬性不匹配。
此條件不能可靠地用於匹配收集屬性。 例如,在以下配置中,如果環境中存在spring.example.values,則條件匹配,但如果存在spring.example.values [0],則條件不匹配。
@ConditionalOnProperty(prefix = "spring", name = "example.values") class ExampleAutoConfiguration { }
上面的例子 ,你最好換一下,換成自己的變量命名。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。