qq交流羣:
812321371
git微信交流羣:
MercyYao
github
配置中心有原生的 SpringCloud Config
、國內開源的 阿里 Nacos
、攜程 Apollo
等。都是配置熱加載的基礎上增長了其餘的功能。spring
配置中心具備配置熱加載,修改配置 -> 推送到程序 -> 執行配置更新。微信
而獲取配置更新的具體內容,這些組件都沒有作到(SpringCloud Config
、Nacos
, Apollo待驗證
)。如:獲取變化的配置 test
更新前爲 123
,更新後爲 111
。maven
SpringCloud Config
、Nacos
、 Apollo待驗證
配置更新都是將整個配置文件推送給服務進行配置對比結果進行更新。這個階段用戶沒法從程序中獲取更新的內容。ide
爲了實現這個擴展功能點,更新結果可讓程序感知。在這個階段用戶經過code能夠實現配置監聽, 監聽到某個配置變化作其餘操做等。svg
示例: 獲取到推送配置變化, 感知到 test
發生變化, 作更新同步數據操做等等。spring-boot
感知結果集如:spa
{
`被更新的配置key`:{
before: `原來的值`,
after: `更新後的值`
},
`被更新的配置key`:{
before: `原來的值`,
after: `更新後的值`
}
}複製代碼
ps: 實際version版本請使用最新版最新版本: ![Maven Central](https://search.maven.org/search?q=g:com.purgeteam%20AND%20a:dynamic-config-spring-boot-starter)3d
<dependency>
<groupId>com.purgeteam</groupId>
<artifactId>dynamic-config-spring-boot-starter</artifactId>
<version>0.1.0.RELEASE</version>
</dependency>複製代碼
固然實際狀況要結合添加動態配置依賴包 SpringCloud Config
、 Nacos
、 Apollo
。
dynamic-config-spring-boot-starter
模塊不包含以上依賴, 須要自行添加。
簡介: 開啓這個特性註解,具有配置推送更新監聽能力。
啓動類添加 @EnableDynamicConfigEvent
註解開啓配置變化監聽功能。
@EnableDynamicConfigEvent
@SpringBootApplication
public class DynamicConfigSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(DynamicConfigSpringBootApplication.class, args);
}
}複製代碼
建立 NacosListener
(名稱隨意) 實現 ApplicationListener
方法
@Slf4j
@Component
public class NacosListener implements ApplicationListener<ActionConfigEvent> {
@Override
public void onApplicationEvent(ActionConfigEvent event) {
log.info("接收事件");
log.info(event.getPropertyMap().toString());
}
}複製代碼
在 NacosListener#onApplicationEvent
方法裏獲取目標值, 做相應的邏輯處理。
ActionConfigEvent event:
public class ActionConfigEvent extends ApplicationEvent {
// 事件說明
private String eventDesc;
// 更新變化結果集
private Map<String, HashMap> propertyMap;
...
}複製代碼
ActionConfigEvent
主要包含 Map
, 從這裏能夠獲取更新變化結果, propertyMap結構以下:
{
`被更新的配置key`:{
before: `原來的值`,
after: `更新後的值`
},
`被更新的配置key`:{
before: `原來的值`,
after: `更新後的值`
}
}複製代碼
ps: 示例爲 Nacos
其它配置中心無差異。
原始配置:
test.age=18
user.name=purgeyao複製代碼
修改配置:
# test.age 將18更新爲19
test.age=19
user.name=purgeyao複製代碼
在 NacosListener#onApplicationEvent
方法加入端點調試觀察 ActionConfigEvent
對象參數。
更新的 test.age
已經被記錄在了 ActionConfigEvent.propertyMap
裏了, 從 18 更新爲 19。
控制檯打印:
2019-10-17 10:44:09.221 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : 接收事件
2019-10-17 10:45:19.752 INFO 54054 --- [-10.1.1.97_8848] c.p.dynamic.config.demo.NacosListener : {test.age={before=18, after=19}}複製代碼
上述功能基於 Nacos
、 SpringCloud Config
或基於 SpringCloud Config
之上構建的配置中心均可以使用, 其餘配置中心待驗證。
qq交流羣:
812321371
微信交流羣:
MercyYao
示例代碼地址:dynamic-config-spring-boot
做者GitHub:
Purgeyao 歡迎關注本文由博客一文多發平臺 OpenWrite 發佈!