You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2018/11/05 04:19:14 UTC

[incubator-dubbo] branch dev-metadata updated: Add app level configuration file; Unified group and namespace in different configcenter implementation.

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/dev-metadata by this push:
     new 201d1f3  Add app level configuration file; Unified group and namespace in different configcenter implementation.
201d1f3 is described below

commit 201d1f30111c19f7e31c2e3119ffed1863f68668
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Nov 5 12:18:59 2018 +0800

    Add app level configuration file; Unified group and namespace in different configcenter implementation.
---
 .../java/org/apache/dubbo/common/Constants.java    |  4 +-
 .../org/apache/dubbo/config/AbstractConfig.java    |  2 +-
 .../apache/dubbo/config/ConfigCenterConfig.java    | 68 +++++++++++++---------
 .../apache/dubbo/config/context/Environment.java   | 15 +++++
 .../src/main/resources/META-INF/compat/dubbo.xsd   |  4 +-
 .../src/main/resources/META-INF/dubbo.xsd          |  4 +-
 .../META-INF/spring/dubbo-demo-consumer.xml        |  6 +-
 .../META-INF/spring/dubbo-demo-provider.xml        |  2 +-
 .../governance/AbstractDynamicConfiguration.java   |  6 +-
 .../support/apollo/ApolloDynamicConfiguration.java | 13 ++---
 .../archaius/ArchaiusDynamicConfiguration.java     | 23 ++++++++
 .../sources/ZooKeeperConfigurationSource.java      |  5 +-
 .../java/org/apache/dubbo/registry/ZKTools.java    |  4 +-
 13 files changed, 105 insertions(+), 51 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
index df67944..a4b64ca 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
@@ -63,10 +63,12 @@ public class Constants {
     public static final String CONFIG_ENV_KEY = "config.env";
     public static final String CONFIG_CLUSTER_KEY = "config.cluster";
     public static final String CONFIG_NAMESPACE_KEY = "config.namespace";
+    public static final String CONFIG_GROUP_KEY = "config.group";
     public static final String CONFIG_CHECK_KEY = "config.check";
-    public static final String CONFIG_DATAID_KEY = "config.dataid";
+    public static final String CONFIG_CONFIGFILE_KEY = "config.configfile";
     public static final String CONFIG_PRIORITY_KEY = "config.priority";
     public static final String CONFIG_TIMEOUT_KEY = "config.timeout";
+    public static final String CONFIG_APPNAME_KEY = "config.appname";
 
     public static final String DEFAULT_CATEGORY = PROVIDERS_CATEGORY;
 
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 68717cb..236e2ba 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -526,7 +526,7 @@ public abstract class AbstractConfig implements Serializable {
         try {
             Configuration configuration = ConfigConverter.toConfiguration(this);
             CompositeConfiguration compositeConfiguration = Environment.getInstance().getStartupCompositeConf(getPrefix(), getId());
-            int index = 2;
+            int index = 3;
             if (!Environment.getInstance().isConfigCenterFirst()) {
                 index = 1;
             }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index e24363a..d454caf 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -40,14 +40,15 @@ public class ConfigCenterConfig extends AbstractConfig {
     private String env;
     private String cluster;
     private String namespace = "dubbo";
-    private String appnamespace;
+    private String group = "dubbo";
     private String username;
     private String password;
     private Long timeout = 3000L;
     private Boolean priority = true;
     private Boolean check = true;
 
-    private String dataid = "dubbo.properties";
+    private String appname;
+    private String configfile = "dubbo.properties";
 
     // customized parameters
     private Map<String, String> parameters;
@@ -77,32 +78,38 @@ public class ConfigCenterConfig extends AbstractConfig {
     }
 
     public void init() throws Exception {
-        // give jvm properties the chance of overriding local configs.
+        // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.config.priority
         refresh();
 
         URL url = toConfigUrl();
         DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url);
         Environment.getInstance().setDynamicConfiguration(dynamicConfiguration);
-        String configContent = dynamicConfiguration.getConfig(dataid, namespace);
+        String configContent = dynamicConfiguration.getConfig(configfile, group);
 
+        String appConfigContent = dynamicConfiguration.getConfig(configfile, appname);
         try {
-            if (configContent == null) {
-                logger.warn("You specified the config centre, but there's not even one single config item in it.");
-            } else {
-                Properties properties = new Properties();
-                properties.load(new StringReader(configContent));
-                Map<String, String> map = new HashMap<>();
-                properties.stringPropertyNames().forEach(
-                        k -> map.put(k, properties.getProperty(k))
-                );
-                Environment.getInstance().setConfigCenterFirst(priority);
-                Environment.getInstance().updateExternalConfigurationMap(map);
-            }
+            Environment.getInstance().setConfigCenterFirst(priority);
+            Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
+            Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
         } catch (IOException e) {
             throw e;
         }
     }
 
+    private Map<String, String> parseProperties(String content) throws IOException {
+        Map<String, String> map = new HashMap<>();
+        if (content == null) {
+            logger.warn("You specified the config centre, but there's not even one single config item in it.");
+        } else {
+            Properties properties = new Properties();
+            properties.load(new StringReader(content));
+            properties.stringPropertyNames().forEach(
+                    k -> map.put(k, properties.getProperty(k))
+            );
+        }
+        return map;
+    }
+
     @Parameter(key = Constants.CONFIG_TYPE_KEY)
     public String getType() {
         return type;
@@ -148,13 +155,13 @@ public class ConfigCenterConfig extends AbstractConfig {
         this.namespace = namespace;
     }
 
-    @Parameter(key = "config.appnamespace")
-    public String getAppnamespace() {
-        return appnamespace;
+    @Parameter(key = Constants.CONFIG_GROUP_KEY)
+    public String getGroup() {
+        return group;
     }
 
-    public void setAppnamespace(String appnamespace) {
-        this.appnamespace = appnamespace;
+    public void setGroup(String group) {
+        this.group = group;
     }
 
     @Parameter(key = Constants.CONFIG_CHECK_KEY)
@@ -200,13 +207,22 @@ public class ConfigCenterConfig extends AbstractConfig {
         this.timeout = timeout;
     }
 
-    @Parameter(key = Constants.CONFIG_DATAID_KEY)
-    public String getDataid() {
-        return dataid;
+    @Parameter(key = Constants.CONFIG_CONFIGFILE_KEY)
+    public String getConfigfile() {
+        return configfile;
+    }
+
+    public void setConfigfile(String configfile) {
+        this.configfile = configfile;
+    }
+
+    @Parameter(key = Constants.CONFIG_APPNAME_KEY)
+    public String getAppname() {
+        return appname;
     }
 
-    public void setDataid(String dataid) {
-        this.dataid = dataid;
+    public void setAppname(String appname) {
+        this.appname = appname;
     }
 
     public Map<String, String> getParameters() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
index 1785c6a..0a2bf12 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
@@ -42,6 +42,7 @@ public class Environment {
     private volatile Map<String, SystemConfiguration> systemConfsHolder = new ConcurrentHashMap<>();
     private volatile Map<String, EnvironmentConfiguration> environmentConfsHolder = new ConcurrentHashMap<>();
     private volatile Map<String, InmemoryConfiguration> externalConfsHolder = new ConcurrentHashMap<>();
+    private volatile Map<String, InmemoryConfiguration> appExternalConfsHolder = new ConcurrentHashMap<>();
     private volatile Map<String, CompositeConfiguration> startupCompositeConfsHolder = new ConcurrentHashMap<>();
     private volatile Map<String, CompositeConfiguration> runtimeCompositeConfsHolder = new ConcurrentHashMap<>();
 
@@ -50,6 +51,7 @@ public class Environment {
     private volatile boolean isConfigCenterFirst = true;
 
     private Map<String, String> externalConfigurationMap = new HashMap<>();
+    private Map<String, String> appExternalConfigurationMap = new HashMap<>();
 
     public static Environment getInstance() {
         return INSTANCE;
@@ -71,6 +73,14 @@ public class Environment {
         });
     }
 
+    public InmemoryConfiguration getAppExternalConfiguration(String prefix, String id) {
+        return appExternalConfsHolder.computeIfAbsent(toKey(prefix, id), k -> {
+            InmemoryConfiguration configuration = new InmemoryConfiguration(prefix, id);
+            configuration.addProperties(appExternalConfigurationMap);
+            return configuration;
+        });
+    }
+
     public EnvironmentConfiguration getEnvironmentConf(String prefix, String id) {
         return environmentConfsHolder.computeIfAbsent(toKey(prefix, id), k -> new EnvironmentConfiguration(prefix, id));
     }
@@ -79,10 +89,15 @@ public class Environment {
         this.externalConfigurationMap.putAll(externalMap);
     }
 
+    public void updateAppExternalConfigurationMap(Map<String, String> externalMap) {
+        this.appExternalConfigurationMap.putAll(externalMap);
+    }
+
     public CompositeConfiguration getStartupCompositeConf(String prefix, String id) {
         return startupCompositeConfsHolder.computeIfAbsent(toKey(prefix, id), k -> {
             CompositeConfiguration compositeConfiguration = new CompositeConfiguration();
             compositeConfiguration.addConfiguration(this.getSystemConf(prefix, id));
+            compositeConfiguration.addConfiguration(this.getAppExternalConfiguration(prefix, id));
             compositeConfiguration.addConfiguration(this.getExternalConfiguration(prefix, id));
             compositeConfiguration.addConfiguration(this.getPropertiesConf(prefix, id));
             return compositeConfiguration;
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index 1d2fc18..9810969 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -624,12 +624,12 @@
                     <![CDATA[ The group of the config center, an isolated space for config items in the same config center. ]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
-        <xsd:attribute name="appnamespace" type="xsd:string" use="optional">
+        <xsd:attribute name="appname" type="xsd:string" use="optional">
             <xsd:annotation>
                 <xsd:documentation><![CDATA[ The group of the config center. ]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
-        <xsd:attribute name="dataid" type="xsd:string" use="optional">
+        <xsd:attribute name="configfile" type="xsd:string" use="optional">
             <xsd:annotation>
                 <xsd:documentation><![CDATA[ The key used to get the configs at startup. ]]></xsd:documentation>
             </xsd:annotation>
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index 028c68e..b2ff6cb 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -618,12 +618,12 @@
                     <![CDATA[ The group of the config center, an isolated space for config items in the same config center. ]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
-        <xsd:attribute name="appnamespace" type="xsd:string" use="optional">
+        <xsd:attribute name="appname" type="xsd:string" use="optional">
             <xsd:annotation>
                 <xsd:documentation><![CDATA[ The group of the config center. ]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
-        <xsd:attribute name="dataid" type="xsd:string" use="optional">
+        <xsd:attribute name="configfile" type="xsd:string" use="optional">
             <xsd:annotation>
                 <xsd:documentation><![CDATA[ The key used to get the configs at startup. ]]></xsd:documentation>
             </xsd:annotation>
diff --git a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
index df40d32..a8d25a8 100644
--- a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
+++ b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
@@ -24,11 +24,11 @@
     <dubbo:application name="demo-consumer"/>
 
     <!-- use multicast registry center to discover service -->
-    <dubbo:registry group="dubboregistrygroup1" address="zookeeper://127.0.0.1:2181" default="true"/>
-    <dubbo:registry group="dubboregistrygroup1" address="zookeeper://127.0.0.1:2181"/>
+    <!--  <dubbo:registry group="dubboregistrygroup1" address="zookeeper://127.0.0.1:2181" default="true"/>
+      <dubbo:registry group="dubboregistrygroup1" address="zookeeper://127.0.0.1:2181"/>-->
 
     <dubbo:configcenter type="zookeeper" address="127.0.0.1:2181" namespace="dubboregistrygroup1"
-                        dataid="dubbo.properties"/>
+                        configfile="dubbo.properties"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
diff --git a/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
index 3d2e2ed..1ac3128 100644
--- a/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
+++ b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
@@ -28,7 +28,7 @@
     <!--<dubbo:registry group="dubboregistrygroup1" address="zookeeper://127.0.0.1:2181" simple="false">
     </dubbo:registry>-->
     <dubbo:configcenter type="zookeeper" address="127.0.0.1:2181" namespace="dubboregistrygroup1"
-                        dataid="dubbo.properties"/>
+                        configfile="dubbo.properties" appname="demo-provider"/>
 
     <!-- use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
diff --git a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/AbstractDynamicConfiguration.java b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/AbstractDynamicConfiguration.java
index 2de419b..146f0a1 100644
--- a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/AbstractDynamicConfiguration.java
+++ b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/AbstractDynamicConfiguration.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentMap;
  *
  */
 public abstract class AbstractDynamicConfiguration<TargetConfigListener> extends AbstractConfiguration implements DynamicConfiguration {
-    public static final String DEFAULT_NAMESPACE = "dubbo";
+    public static final String DEFAULT_GROUP = "dubbo";
     protected URL url;
     /**
      * One key can register multiple target listeners, but one target listener only maps to one configuration listener
@@ -46,7 +46,7 @@ public abstract class AbstractDynamicConfiguration<TargetConfigListener> extends
 
     @Override
     public String getConfig(String key) {
-        return getConfig(key, url.getParameter(Constants.CONFIG_NAMESPACE_KEY, DEFAULT_NAMESPACE), null);
+        return getConfig(key, url.getParameter(Constants.CONFIG_GROUP_KEY, DEFAULT_GROUP), null);
     }
 
     @Override
@@ -56,7 +56,7 @@ public abstract class AbstractDynamicConfiguration<TargetConfigListener> extends
 
     @Override
     public String getConfig(String key, ConfigurationListener listener) {
-        return getConfig(key, url.getParameter(Constants.CONFIG_NAMESPACE_KEY, DEFAULT_NAMESPACE), listener);
+        return getConfig(key, url.getParameter(Constants.CONFIG_GROUP_KEY, DEFAULT_GROUP), listener);
     }
 
     @Override
diff --git a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java b/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
index 0c83088..b236709 100644
--- a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
+++ b/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
@@ -44,7 +44,6 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
     private static final String APOLLO_ENV_KEY = "env";
     private static final String APOLLO_ADDR_KEY = "apollo.meta";
     private static final String APOLLO_CLUSTER_KEY = "apollo.cluster";
-    private static final String APPLO_DEFAULT_NAMESPACE = "dubbo";
 
     private Config dubboConfig;
 
@@ -72,7 +71,7 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
             System.setProperty(APOLLO_CLUSTER_KEY, configCluster);
         }
 
-        dubboConfig = ConfigService.getConfig(url.getParameter(Constants.CONFIG_NAMESPACE_KEY, APPLO_DEFAULT_NAMESPACE));
+        dubboConfig = ConfigService.getConfig(url.getParameter(Constants.CONFIG_GROUP_KEY, DEFAULT_GROUP));
         // Decide to fail or to continue when failed to connect to remote server.
         boolean check = url.getParameter(Constants.CONFIG_CHECK_KEY, false);
         if (dubboConfig.getSourceType() != ConfigSourceType.REMOTE) {
@@ -87,9 +86,9 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
     }
 
     /**
-     * This method will used by DynamicConfiguration,
-     * 1. to get configuration file at startup phase
-     * 2. to get all kinds of Dubbo rules
+     * This method will being used to,
+     * 1. get configuration file at startup phase
+     * 2. get all kinds of Dubbo rules
      *
      * @param key
      * @param group
@@ -98,7 +97,7 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
      */
     @Override
     protected String getInternalProperty(String key, String group, long timeout) {
-        if (group != null) {
+        if (DEFAULT_GROUP.equals(group)) {
             Config config = ConfigService.getConfig(group);
             if (config != null) {
                 return config.getProperty(key, null);
@@ -111,7 +110,7 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
     /**
      * This method will used by Configuration to get valid value at runtime.
      * The group is expected to be 'app level', which can be fetched from the 'config.appnamespace' in url if necessary.
-     * But I think Apollo's inheritance feature of namespace can solve the problem, .
+     * But I think Apollo's inheritance feature of namespace can solve the problem .
      *
      * @param key
      * @return
diff --git a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
index 922387d..e35f95d 100644
--- a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
+++ b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
@@ -63,13 +63,36 @@ public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<R
         }
     }
 
+    /**
+     * The hierarchy of configuration properties is:
+     * 1. /{namespace}/config/dubbo/dubbo.properties
+     * 2. /{namespace}/config/applicationname/dubbo.properties
+     * <p>
+     * To make the API compatible with other configuration systems, the key doesn't has group as prefix, so we should add the group prefix before try to get value.
+     * If being used for dubbo router rules, the key must already contains group prefix.
+     *
+     * @param key
+     * @param group
+     * @param timeout
+     * @return
+     */
     @Override
     protected String getInternalProperty(String key, String group, long timeout) {
+        if (StringUtils.isNotEmpty(group)) {
+            key = group + "." + key;
+        }
+
         return DynamicPropertyFactory.getInstance()
                 .getStringProperty(key, null)
                 .get();
     }
 
+    /**
+     * First, get app level configuration
+     * If there's no value in app level, try to get global dubbo level.
+     * @param key
+     * @return
+     */
     @Override
     protected Object getInternalProperty(String key) {
         return DynamicPropertyFactory.getInstance()
diff --git a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/sources/ZooKeeperConfigurationSource.java b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/sources/ZooKeeperConfigurationSource.java
index ec48c2d..2e810d4 100644
--- a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/sources/ZooKeeperConfigurationSource.java
+++ b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/sources/ZooKeeperConfigurationSource.java
@@ -27,7 +27,6 @@ import org.apache.curator.framework.recipes.cache.TreeCache;
 import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
 import org.apache.curator.framework.recipes.cache.TreeCacheListener;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.slf4j.Logger;
@@ -212,10 +211,10 @@ public class ZooKeeperConfigurationSource implements WatchedConfigurationSource,
         if (dataMap != null && dataMap.size() > 0) {
             dataMap.forEach((childPath, childData) -> {
                 String fullChildPath = configRootPath + "/" + childPath;
-                // special treatment for /dubbo/config/dubbo.properties, it's the only config item need to store in cache in this level.
+                /*// special treatment for /dubbo/config/dubbo.properties, it's the only config item need to store in cache in this level.
                 if (childPath.equals(url.getParameter(Constants.CONFIG_DATAID_KEY))) {
                     all.put(pathToKey(fullChildPath), new String(childData.getData(), charset));
-                }
+                }*/
                 treeCache.getCurrentChildren(fullChildPath).forEach((subChildPath, subChildData) -> {
                     all.put(pathToKey(fullChildPath + "/" + subChildPath), new String(subChildData.getData(), charset));
                 });
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ZKTools.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ZKTools.java
index 480c3a8..930a286 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ZKTools.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ZKTools.java
@@ -52,7 +52,7 @@ public class ZKTools {
     }
 
     public static void testStartupConfig() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
+        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2182\n" +
                 "dubbo.registry.group=dubboregistrygroup1\n" +
                 "dubbo.servicestore.address=zookeeper://127.0.0.1:2181\n" +
                 "dubbo.protocol.port=20990\n" +
@@ -61,7 +61,7 @@ public class ZKTools {
         System.out.println(str);
 
         try {
-            String path = "/dubboregistrygroup1/config/dubbo.properties";
+            String path = "/dubboregistrygroup1/config/demo-provider/dubbo.properties";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }