天天看點

單體SpringBoot整合Apollo實作@ConfigurationProperties屬性重新整理

作者:吾日三省Java

本文主要分享了單體SpringBoot(非SpringCloud)整合Apollo中,如何實作@ConfigurationProperties的屬性重新整理。

一、問題描述

在SpringCloud微服務中,相信很多小夥伴都用過以下方式去解決下@ConfigurationProperties的屬性重新整理

單體SpringBoot整合Apollo實作@ConfigurationProperties屬性重新整理

但在單體SpringBoot項目中就不好使了,因為EnvironmentChangeEvent的全路徑是org.springframework.cloud.context.environment.EnvironmentChangeEvent,該類在spring-cloud-context-xxx.jar中,而單體SpringBoot應用通常情況下是不依賴SpringCloud的jar的。

單體SpringBoot整合Apollo實作@ConfigurationProperties屬性重新整理

二、解題思路

問:能否把EnvironmentChangeEvent的邏輯從spring-cloud-context-xxx.jar複制出來使用?

答:是可以的

1.找到EnvironmentChangeEvent的消費者邏輯所在類ConfigurationPropertiesRebinder(屬性重新整理的邏輯就在這裡)

2.将ConfigurationPropertiesRebinder所依賴的類也複制出來,發現隻有ConfigurationPropertiesBeans

3.是以需要複制的類隻有3個:EnvironmentChangeEvent、ConfigurationPropertiesRebinder、ConfigurationPropertiesBeans

單體SpringBoot整合Apollo實作@ConfigurationProperties屬性重新整理

4.在ConfigurationPropertiesBeans.isRefreshScoped中有一段邏輯依賴RefreshScope,這塊邏輯不需要,是以可以直接注釋掉

單體SpringBoot整合Apollo實作@ConfigurationProperties屬性重新整理

5.PropertiesRefresher中引入複制出來的類EnvironmentChangeEvent,大功告成

在使用這種方式之前,作者本人也在網上找了很多資料,沒能找到比較好的實作方式。突發靈感地往使用springcloud源碼的方向試了一下,發現還真的可行。在此記錄以分享各位碼友。

怎麼樣?如果你覺得有用的話,還不快快收藏起來!!!