本文主要分享了單體SpringBoot(非SpringCloud)整合Apollo中,如何實作@ConfigurationProperties的屬性重新整理。
一、問題描述
在SpringCloud微服務中,相信很多小夥伴都用過以下方式去解決下@ConfigurationProperties的屬性重新整理
但在單體SpringBoot項目中就不好使了,因為EnvironmentChangeEvent的全路徑是org.springframework.cloud.context.environment.EnvironmentChangeEvent,該類在spring-cloud-context-xxx.jar中,而單體SpringBoot應用通常情況下是不依賴SpringCloud的jar的。
二、解題思路
問:能否把EnvironmentChangeEvent的邏輯從spring-cloud-context-xxx.jar複制出來使用?
答:是可以的
1.找到EnvironmentChangeEvent的消費者邏輯所在類ConfigurationPropertiesRebinder(屬性重新整理的邏輯就在這裡)
2.将ConfigurationPropertiesRebinder所依賴的類也複制出來,發現隻有ConfigurationPropertiesBeans
3.是以需要複制的類隻有3個:EnvironmentChangeEvent、ConfigurationPropertiesRebinder、ConfigurationPropertiesBeans
4.在ConfigurationPropertiesBeans.isRefreshScoped中有一段邏輯依賴RefreshScope,這塊邏輯不需要,是以可以直接注釋掉
5.PropertiesRefresher中引入複制出來的類EnvironmentChangeEvent,大功告成
在使用這種方式之前,作者本人也在網上找了很多資料,沒能找到比較好的實作方式。突發靈感地往使用springcloud源碼的方向試了一下,發現還真的可行。在此記錄以分享各位碼友。
怎麼樣?如果你覺得有用的話,還不快快收藏起來!!!