From 69db0b131b59940227fc2ffc15a9df2f9917d27d Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Fri, 4 Mar 2022 15:54:08 +0800 Subject: [PATCH] Support batch update fizz configs --- .../config/FizzBeanFactoryPostProcessor.java | 56 ++++++------------- .../event/FizzRefreshEventListener.java | 19 ++----- 2 files changed, 21 insertions(+), 54 deletions(-) diff --git a/fizz-core/src/main/java/we/beans/factory/config/FizzBeanFactoryPostProcessor.java b/fizz-core/src/main/java/we/beans/factory/config/FizzBeanFactoryPostProcessor.java index 4f1c269..cfa7490 100644 --- a/fizz-core/src/main/java/we/beans/factory/config/FizzBeanFactoryPostProcessor.java +++ b/fizz-core/src/main/java/we/beans/factory/config/FizzBeanFactoryPostProcessor.java @@ -44,10 +44,7 @@ import we.context.event.FizzRefreshEvent; import we.global_resource.GlobalResource; import we.util.*; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; /** * @author hongqiaowei @@ -152,44 +149,23 @@ public class FizzBeanFactoryPostProcessor implements BeanFactoryPostProcessor, E msg -> { String message = msg.getMessage(); try { - /*Map changes = JacksonUtils.readValue(message, new TypeReference>(){}); - boolean defaultConfigEnable = false; - String defaultConfigEnableStr = changes.get("fizz.default-config.enable"); - if (defaultConfigEnableStr == null) { - defaultConfigEnable = environment.getProperty("fizz.default-config.enable", Boolean.class, false); - } else { - defaultConfigEnable = Boolean.parseBoolean(defaultConfigEnableStr); - } - boolean finalDefaultConfigEnable = defaultConfigEnable; - changes.forEach( - (property, value) -> { - if (StringUtils.isBlank(value)) { - if (finalDefaultConfigEnable) { - Object v = FizzConfigConfiguration.DEFAULT_CONFIG_MAP.get(property); - if (v == null) { - sources.remove(property); - } else { - sources.put(property, v); - } - } else { - sources.remove(property); - } - } else { - sources.put(property, value); - } - } - );*/ - Map change = JacksonUtils.readValue(message, new TypeReference>(){}); - int isDeleted = (int) change.remove("isDeleted"); - Map.Entry propertyValue = change.entrySet().iterator().next(); - String property = propertyValue.getKey(); - if (isDeleted == 1) { - sources.remove(property); - } else { - sources.put(property, propertyValue.getValue()); + Map changedPropertyValueMap = new HashMap<>(); + List> changes = JacksonUtils.readValue(message, new TypeReference>>(){}); + for (Map change : changes) { + int isDeleted = (int) change.remove("isDeleted"); + Map.Entry propertyValue = change.entrySet().iterator().next(); + String property = propertyValue.getKey(); + Object v = null; + if (isDeleted == 1) { + sources.remove(property); + } else { + v = propertyValue.getValue(); + sources.put(property, v); + } + changedPropertyValueMap.put(property, v); } LOGGER.info("new fizz configs: {}", JacksonUtils.writeValueAsString(sources)); - FizzRefreshEvent refreshEvent = new FizzRefreshEvent(applicationContext, FizzRefreshEvent.ENV_CHANGE, change); + FizzRefreshEvent refreshEvent = new FizzRefreshEvent(applicationContext, FizzRefreshEvent.ENV_CHANGE, changedPropertyValueMap); applicationContext.publishEvent(refreshEvent); } catch (Throwable t) { LOGGER.error("update fizz config {} error", message, t); diff --git a/fizz-core/src/main/java/we/context/event/FizzRefreshEventListener.java b/fizz-core/src/main/java/we/context/event/FizzRefreshEventListener.java index a196ab4..fdd82af 100644 --- a/fizz-core/src/main/java/we/context/event/FizzRefreshEventListener.java +++ b/fizz-core/src/main/java/we/context/event/FizzRefreshEventListener.java @@ -24,6 +24,7 @@ import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; import we.beans.factory.config.FizzBeanFactoryPostProcessor; import we.context.scope.refresh.FizzRefreshScope; +import we.util.JacksonUtils; import java.util.HashMap; import java.util.Map; @@ -70,13 +71,13 @@ public class FizzRefreshEventListener implements SmartApplicationListener { if (this.ready.get()) { // EnvironmentChangeEvent ? if (event.getType() == FizzRefreshEvent.ENV_CHANGE) { - /*Map> bean2propertyValuesMap = new HashMap<>(); - Map changedPropertyValueMap = (Map) event.getData(); + Map> bean2propertyValuesMap = new HashMap<>(); + Map changedPropertyValueMap = (Map) event.getData(); changedPropertyValueMap.forEach( (property, value) -> { String bean = fizzBeanFactoryPostProcessor.getBean(property); if (bean != null) { - Map propertyValueMap = bean2propertyValuesMap.computeIfAbsent(bean, k -> new HashMap<>()); + Map propertyValueMap = bean2propertyValuesMap.computeIfAbsent(bean, k -> new HashMap<>()); propertyValueMap.put(property, value); } } @@ -84,17 +85,7 @@ public class FizzRefreshEventListener implements SmartApplicationListener { bean2propertyValuesMap.forEach( (bean, propertyValueMap) -> { fizzRefreshScope.refresh(bean); - LOGGER.info("fizz refresh {} bean with {}", bean, propertyValueMap); - } - );*/ - Map changedPropertyValue = (Map) event.getData(); - changedPropertyValue.forEach( - (property, value) -> { - String bean = fizzBeanFactoryPostProcessor.getBean(property); - if (bean != null) { - fizzRefreshScope.refresh(bean); - LOGGER.info("fizz refresh {} bean with {}={}", bean, property, value); - } + LOGGER.info("fizz refresh {} bean with {}", bean, JacksonUtils.writeValueAsString(propertyValueMap)); } ); }