From 84f087e1c1b5f69ff913904fb33a41edf5a70232 Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Fri, 10 Feb 2023 18:07:19 +0800 Subject: [PATCH] Fix problem when update fizz config dynamically --- .../config/FizzBeanFactoryPostProcessor.java | 8 ++++++++ .../config/FizzEnvironmentPostProcessor.java | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzBeanFactoryPostProcessor.java b/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzBeanFactoryPostProcessor.java index 439cbb4..573cc60 100644 --- a/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzBeanFactoryPostProcessor.java +++ b/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzBeanFactoryPostProcessor.java @@ -17,6 +17,7 @@ package com.fizzgate.beans.factory.config; +import com.fizzgate.config.FizzConfigConfiguration; import com.fizzgate.context.config.annotation.FizzRefreshScope; import com.fizzgate.util.Consts; import com.fizzgate.util.JacksonUtils; @@ -35,6 +36,8 @@ import org.springframework.context.EnvironmentAware; import org.springframework.core.Ordered; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.MutablePropertySources; import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import java.util.HashMap; @@ -69,6 +72,11 @@ public class FizzBeanFactoryPostProcessor implements BeanFactoryPostProcessor, E if (fizzConfigEnable.equals(Consts.S.TRUE)) { // initReactiveStringRedisTemplate(); // initFizzPropertySource(); + + Map sources = FizzEnvironmentPostProcessor.getSources(); + MapPropertySource fizzPropertySource = new MapPropertySource(FizzConfigConfiguration.PROPERTY_SOURCE + "AfterBeanFactory", sources); + environment.getPropertySources().addFirst(fizzPropertySource); + initBeanProperty2beanMap(beanFactory); } } diff --git a/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzEnvironmentPostProcessor.java b/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzEnvironmentPostProcessor.java index 08d1bd3..c0b9583 100644 --- a/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzEnvironmentPostProcessor.java +++ b/fizz-core/src/main/java/com/fizzgate/beans/factory/config/FizzEnvironmentPostProcessor.java @@ -18,6 +18,7 @@ import org.springframework.boot.logging.DeferredLog; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; +import org.springframework.core.Ordered; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MutablePropertySources; @@ -34,18 +35,28 @@ import java.util.Map; * @author hongqiaowei */ -public class FizzEnvironmentPostProcessor implements EnvironmentPostProcessor, SmartApplicationListener { +public class FizzEnvironmentPostProcessor implements EnvironmentPostProcessor, SmartApplicationListener, Ordered { private static final DeferredLog LOGGER = new DeferredLog(); private static Logger LOG = null; + private static final Map sources = new HashMap<>(); + private ConfigurableEnvironment environment; private ReactiveStringRedisTemplate reactiveStringRedisTemplate; + protected static Map getSources() { + return sources; + } + + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } + @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { String fizzConfigEnable = environment.getProperty("fizz.config.enable", Consts.S.TRUE); @@ -84,8 +95,7 @@ public class FizzEnvironmentPostProcessor implements EnvironmentPostProcessor, S private void initFizzPropertySource() { MutablePropertySources propertySources = environment.getPropertySources(); - Map sources = new HashMap<>(); - MapPropertySource fizzPropertySource = new MapPropertySource(FizzConfigConfiguration.PROPERTY_SOURCE, sources); + MapPropertySource fizzPropertySource = new MapPropertySource(FizzConfigConfiguration.PROPERTY_SOURCE + "AfterEnv", sources); propertySources.addFirst(fizzPropertySource); Result result = Result.succ();