From d95aa7e455af2e10d94e7bc356fdc27a0a844b8b Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Tue, 8 Sep 2020 17:16:20 +0800 Subject: [PATCH] make sure dynamic configuration is included after globalConfiguration is cached. --- .../dubbo/common/config/CompositeConfiguration.java | 12 ++++++++++++ .../org/apache/dubbo/common/config/Environment.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java index eebf5a00b5..75a79a5677 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java @@ -38,6 +38,9 @@ public class CompositeConfiguration implements Configuration { */ private List configList = new LinkedList(); + //FIXME, consider change configList to SortedMap to replace this boolean status. + private boolean dynamicIncluded; + public CompositeConfiguration() { this(null, null); } @@ -58,6 +61,15 @@ public class CompositeConfiguration implements Configuration { } } + public void setDynamicIncluded(boolean dynamicIncluded) { + this.dynamicIncluded = dynamicIncluded; + } + + //FIXME, consider change configList to SortedMap to replace this boolean status. + public boolean isDynamicIncluded() { + return dynamicIncluded; + } + public void addConfiguration(Configuration configuration) { if (configList.contains(configuration)) { return; diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java index b5f24f745d..afc5df31af 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java @@ -148,12 +148,18 @@ public class Environment extends LifecycleAdapter implements FrameworkExt { globalConfiguration = new CompositeConfiguration(); if (dynamicConfiguration != null) { globalConfiguration.addConfiguration(dynamicConfiguration); + globalConfiguration.setDynamicIncluded(true); } globalConfiguration.addConfiguration(systemConfiguration); globalConfiguration.addConfiguration(environmentConfiguration); globalConfiguration.addConfiguration(appExternalConfiguration); globalConfiguration.addConfiguration(externalConfiguration); globalConfiguration.addConfiguration(propertiesConfiguration); + } else { + if (!globalConfiguration.isDynamicIncluded() && dynamicConfiguration != null) { + globalConfiguration.addConfiguration(dynamicConfiguration); + globalConfiguration.setDynamicIncluded(true); + } } return globalConfiguration; }