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/01 07:20:15 UTC

[incubator-dubbo] 06/06: Merge url part from cvictory and fix configuration override problems

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

commit b727c87e5bed3da67064103bf0841a7f5c17b89e
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 1 15:19:14 2018 +0800

    Merge url part from cvictory and fix configuration override problems
---
 .../java/org/apache/dubbo/common/Constants.java    |  4 ++++
 .../common/config/AbstractPrefixConfiguration.java |  7 ++++--
 .../org/apache/dubbo/config/AbstractConfig.java    |  6 +++---
 .../apache/dubbo/config/ConfigCenterConfig.java    | 25 +++++++++++-----------
 .../org/apache/dubbo/config/ReferenceConfig.java   |  2 +-
 .../apache/dubbo/config/RegistryDataConfig.java    | 13 +++++------
 .../org/apache/dubbo/config/ServiceConfig.java     |  2 +-
 .../apache/dubbo/config/context/Environment.java   | 25 ++++++++++++++++------
 .../apache/dubbo/config/utils/ConfigConverter.java |  1 +
 .../apache/dubbo/config/spring/ReferenceBean.java  |  2 +-
 .../apache/dubbo/config/spring/ServiceBean.java    |  4 ++--
 .../META-INF/spring/dubbo-demo-consumer.xml        |  9 +++++---
 .../META-INF/spring/dubbo-demo-provider.xml        |  8 +++----
 .../archaius/ArchaiusDynamicConfiguration.java     |  2 +-
 .../sources/ZooKeeperConfigurationSource.java      | 19 +++++++++++-----
 .../definition/ServiceDefinitionBuilder.java       |  2 +-
 .../metadata/definition/TypeDefinitionBuilder.java |  2 +-
 .../definition/builder/ArrayTypeBuilder.java       |  2 +-
 .../definition/builder/CollectionTypeBuilder.java  |  4 ++--
 .../definition/builder/DefaultTypeBuilder.java     |  2 +-
 .../definition/builder/EnumTypeBuilder.java        |  2 +-
 .../definition/builder/MapTypeBuilder.java         |  6 +++---
 .../metadata/definition/builder/TypeBuilder.java   |  2 +-
 .../definition/model/FullServiceDefinition.java    |  6 +++---
 .../definition/model/MethodDefinition.java         |  2 +-
 .../definition/model/ServiceDefinition.java        |  2 +-
 .../metadata/definition/model/TypeDefinition.java  |  2 +-
 .../dubbo/metadata/definition/util/ClassUtils.java | 11 ++++------
 .../definition/util/JaketConfigurationUtils.java   |  2 +-
 .../dubbo/metadata/definition/MetadataTest.java    |  4 ++--
 .../dubbo/metadata/definition/MetadataUtils.java   |  2 +-
 .../definition/common/ClassExtendsMap.java         |  3 ++-
 .../metadata/definition/common/OuterClass.java     |  2 +-
 .../common/ResultWithRawCollections.java           |  3 ++-
 .../metadata/definition/common/TestService.java    |  2 +-
 .../identifier/ConsumerMetadataIdentifier.java     |  6 ++++--
 .../metadata/identifier/MetadataIdentifier.java    |  8 +++----
 .../integration/MetadataReportService.java         | 14 ++----------
 .../metadata/support/AbstractMetadataReport.java   |  2 +-
 .../support/AbstractMetadataReportFactory.java     |  4 ----
 .../store/test/JTestMetadataReport4Test.java       |  2 +-
 .../test/JTestMetadataReportFactory4Test.java      |  2 +-
 .../support/AbstractMetadataReportFactoryTest.java |  1 +
 .../metadata/store/redis/RedisMetadataReport.java  |  2 +-
 .../store/zookeeper/ZookeeperMetadataReport.java   |  6 ++----
 .../zookeeper/ZookeeperMetadataReportFactory.java  |  2 +-
 .../zookeeper/ZookeeperMetadataReportTest.java     |  1 -
 .../java/org/apache/dubbo/registry/ZKTools.java    | 10 +++++----
 48 files changed, 134 insertions(+), 118 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 91e54b2..df67944 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
@@ -64,6 +64,9 @@ public class Constants {
     public static final String CONFIG_CLUSTER_KEY = "config.cluster";
     public static final String CONFIG_NAMESPACE_KEY = "config.namespace";
     public static final String CONFIG_CHECK_KEY = "config.check";
+    public static final String CONFIG_DATAID_KEY = "config.dataid";
+    public static final String CONFIG_PRIORITY_KEY = "config.priority";
+    public static final String CONFIG_TIMEOUT_KEY = "config.timeout";
 
     public static final String DEFAULT_CATEGORY = PROVIDERS_CATEGORY;
 
@@ -460,6 +463,7 @@ public class Constants {
     public static final String EXTRA_PROVIDER_URL_PARAM_KEYS_KEY = "extraProviderUrlParamKeys";
     /**
      * After simplify the registry, should add some paramter individually for consumer.
+     *
      * @since 2.7.0
      */
     public static final String EXTRA_CONSUMER_URL_PARAM_KEYS_KEY = "extraConsumerUrlParamKeys";
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractPrefixConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractPrefixConfiguration.java
index eebff14..8f53aa5 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractPrefixConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractPrefixConfiguration.java
@@ -27,13 +27,16 @@ public abstract class AbstractPrefixConfiguration extends AbstractConfiguration
 
     public AbstractPrefixConfiguration(String prefix, String id) {
         super();
-        this.prefix = prefix;
+        if (StringUtils.isNotEmpty(prefix) && !prefix.endsWith(".")) {
+            this.prefix = prefix + ".";
+        } else {
+            this.prefix = prefix;
+        }
         this.id = id;
     }
 
     @Override
     public Object getProperty(String key, Object defaultValue) {
-
         Object value = null;
         if (StringUtils.isNotEmpty(prefix) && StringUtils.isNotEmpty(id)) {
             value = getInternalProperty(prefix + id + "." + key);
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 69e266f..68717cb 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,9 +526,9 @@ public abstract class AbstractConfig implements Serializable {
         try {
             Configuration configuration = ConfigConverter.toConfiguration(this);
             CompositeConfiguration compositeConfiguration = Environment.getInstance().getStartupCompositeConf(getPrefix(), getId());
-            int index = 1;
-            if (Environment.getInstance().isConfigCenterFirst()) {
-                index = 2;
+            int index = 2;
+            if (!Environment.getInstance().isConfigCenterFirst()) {
+                index = 1;
             }
             compositeConfiguration.addConfiguration(index, configuration);
             // loop methods, get override value and set the new value back to method
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 0e1497c..e24363a 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
@@ -43,9 +43,9 @@ public class ConfigCenterConfig extends AbstractConfig {
     private String appnamespace;
     private String username;
     private String password;
-    private long timeout = 3000;
-    private boolean priority;
-    private boolean check;
+    private Long timeout = 3000L;
+    private Boolean priority = true;
+    private Boolean check = true;
 
     private String dataid = "dubbo.properties";
 
@@ -96,7 +96,7 @@ public class ConfigCenterConfig extends AbstractConfig {
                         k -> map.put(k, properties.getProperty(k))
                 );
                 Environment.getInstance().setConfigCenterFirst(priority);
-                Environment.getInstance().updateExternalConfiguration(map);
+                Environment.getInstance().updateExternalConfigurationMap(map);
             }
         } catch (IOException e) {
             throw e;
@@ -158,20 +158,20 @@ public class ConfigCenterConfig extends AbstractConfig {
     }
 
     @Parameter(key = Constants.CONFIG_CHECK_KEY)
-    public boolean isCheck() {
+    public Boolean isCheck() {
         return check;
     }
 
-    public void setCheck(boolean check) {
+    public void setCheck(Boolean check) {
         this.check = check;
     }
 
-    @Parameter(key = "config.priority")
-    public boolean isPriority() {
+    @Parameter(key = Constants.CONFIG_PRIORITY_KEY)
+    public Boolean isPriority() {
         return priority;
     }
 
-    public void setPriority(boolean priority) {
+    public void setPriority(Boolean priority) {
         this.priority = priority;
     }
 
@@ -191,15 +191,16 @@ public class ConfigCenterConfig extends AbstractConfig {
         this.password = password;
     }
 
-    @Parameter(key = "config.timeout")
-    public long getTimeout() {
+    @Parameter(key = Constants.CONFIG_TIMEOUT_KEY)
+    public Long getTimeout() {
         return timeout;
     }
 
-    public void setTimeout(long timeout) {
+    public void setTimeout(Long timeout) {
         this.timeout = timeout;
     }
 
+    @Parameter(key = Constants.CONFIG_DATAID_KEY)
     public String getDataid() {
         return dataid;
     }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 8b6e879..696840c 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -408,7 +408,7 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
          * ServiceData Store
          */
         MetadataReportService metadataReportService = null;
-        if ((metadataReportService = getMetadataReportService()) != null){
+        if ((metadataReportService = getMetadataReportService()) != null) {
             URL consumerURL = new URL(Constants.CONSUMER_PROTOCOL, map.remove(Constants.REGISTER_IP_KEY), 0, map.get(Constants.INTERFACE_KEY), map);
             metadataReportService.publishConsumer(consumerURL);
         }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
index 6f5b790..3ccaab5 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
@@ -18,11 +18,8 @@ package org.apache.dubbo.config;
 
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.metadata.identifier.ConsumerMetadataIdentifier;
 
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,17 +33,17 @@ public class RegistryDataConfig extends AbstractConfig {
     private boolean simpleConsumerUrl;
     private String extraConsumerUrlParamKeys;
 
-    public Map<String, String> transferMap(){
+    public Map<String, String> transferMap() {
         Map<String, String> map = new HashMap<String, String>(4);
-        if(simpleProviderUrl){
+        if (simpleProviderUrl) {
             map.put(Constants.SIMPLE_PROVIDER_URL_KEY, Boolean.TRUE.toString());
-            if (StringUtils.isNotEmpty(extraProviderUrlParamKeys)){
+            if (StringUtils.isNotEmpty(extraProviderUrlParamKeys)) {
                 map.put(Constants.EXTRA_PROVIDER_URL_PARAM_KEYS_KEY, extraProviderUrlParamKeys.trim());
             }
         }
-        if(simpleConsumerUrl){
+        if (simpleConsumerUrl) {
             map.put(Constants.SIMPLE_CONSUMER_URL_KEY, Boolean.TRUE.toString());
-            if (StringUtils.isNotEmpty(extraConsumerUrlParamKeys)){
+            if (StringUtils.isNotEmpty(extraConsumerUrlParamKeys)) {
                 map.put(Constants.EXTRA_CONSUMER_URL_PARAM_KEYS_KEY, extraConsumerUrlParamKeys.trim());
             }
         }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index ecc4f51..4c20230 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -534,7 +534,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
                  * ServiceData Store
                  */
                 MetadataReportService metadataReportService = null;
-                if ((metadataReportService = getMetadataReportService()) != null){
+                if ((metadataReportService = getMetadataReportService()) != null) {
                     metadataReportService.publishProvider(url);
                 }
             }
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 db9daaa..1785c6a 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
@@ -28,6 +28,7 @@ import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.governance.DynamicConfiguration;
 import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -40,14 +41,15 @@ public class Environment {
     private volatile Map<String, PropertiesConfiguration> propertiesConfsHolder = new ConcurrentHashMap<>();
     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, CompositeConfiguration> startupCompositeConfsHolder = new ConcurrentHashMap<>();
     private volatile Map<String, CompositeConfiguration> runtimeCompositeConfsHolder = new ConcurrentHashMap<>();
 
-    private volatile InmemoryConfiguration externalConfiguration = new InmemoryConfiguration();
-
     private volatile DynamicConfiguration dynamicConfiguration;
 
-    private volatile boolean isConfigCenterFirst;
+    private volatile boolean isConfigCenterFirst = true;
+
+    private Map<String, String> externalConfigurationMap = new HashMap<>();
 
     public static Environment getInstance() {
         return INSTANCE;
@@ -61,19 +63,27 @@ public class Environment {
         return systemConfsHolder.computeIfAbsent(toKey(prefix, id), k -> new SystemConfiguration(prefix, id));
     }
 
+    public InmemoryConfiguration getExternalConfiguration(String prefix, String id) {
+        return externalConfsHolder.computeIfAbsent(toKey(prefix, id), k -> {
+            InmemoryConfiguration configuration = new InmemoryConfiguration(prefix, id);
+            configuration.addProperties(externalConfigurationMap);
+            return configuration;
+        });
+    }
+
     public EnvironmentConfiguration getEnvironmentConf(String prefix, String id) {
         return environmentConfsHolder.computeIfAbsent(toKey(prefix, id), k -> new EnvironmentConfiguration(prefix, id));
     }
 
-    public void updateExternalConfiguration(Map<String, String> externalMap) {
-        this.externalConfiguration.addProperties(externalMap);
+    public void updateExternalConfigurationMap(Map<String, String> externalMap) {
+        this.externalConfigurationMap.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.externalConfiguration);
+            compositeConfiguration.addConfiguration(this.getExternalConfiguration(prefix, id));
             compositeConfiguration.addConfiguration(this.getPropertiesConf(prefix, id));
             return compositeConfiguration;
         });
@@ -82,7 +92,8 @@ public class Environment {
     /**
      * FIXME This method will recreate Configuration for each RPC, how much latency affect will this action has on performance?
      *
-     * @param url
+     * @param url, the url metadata.
+     * @param method, the method name the RPC is trying to invoke.
      * @return
      */
     public CompositeConfiguration getRuntimeCompositeConf(URL url, String method) {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigConverter.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigConverter.java
index bca4233..df5b8cb 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigConverter.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigConverter.java
@@ -31,6 +31,7 @@ public class ConfigConverter {
      * @return
      */
     public static Configuration toConfiguration(AbstractConfig config) {
+        // FIXME does not need to pass prefix and id to Configuration? because keys generated in getMetadata() did not count prefix in.
         InmemoryConfiguration configuration = new InmemoryConfiguration(config.getPrefix(), config.getId());
         configuration.addProperties(config.getMetaData());
         return configuration;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
index 2b0436e..07b7b2f 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
@@ -153,7 +153,7 @@ public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean,
             if (metadataReportConfigMap != null && metadataReportConfigMap.size() == 1) {
                 // first elements
                 super.setMetadataReportConfig(metadataReportConfigMap.values().iterator().next());
-            } else if(metadataReportConfigMap != null && metadataReportConfigMap.size() > 1){
+            } else if (metadataReportConfigMap != null && metadataReportConfigMap.size() > 1) {
                 throw new IllegalStateException("Multiple MetadataReport configs: " + metadataReportConfigMap);
             }
         }
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
index e6974ae..b644d62 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
@@ -17,13 +17,13 @@
 package org.apache.dubbo.config.spring;
 
 import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.MetadataReportConfig;
 import org.apache.dubbo.config.ModuleConfig;
 import org.apache.dubbo.config.MonitorConfig;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.RegistryConfig;
 import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.config.MetadataReportConfig;
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
 import org.springframework.aop.support.AopUtils;
@@ -216,7 +216,7 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
             if (metadataReportConfigMap != null && metadataReportConfigMap.size() == 1) {
                 // 第一个元素
                 super.setMetadataReportConfig(metadataReportConfigMap.values().iterator().next());
-            } else if(metadataReportConfigMap != null && metadataReportConfigMap.size() > 1){
+            } else if (metadataReportConfigMap != null && metadataReportConfigMap.size() > 1) {
                 throw new IllegalStateException("Multiple MetadataReport configs: " + metadataReportConfigMap);
             }
         }
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 cfc8f0f..df40d32 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
@@ -21,11 +21,14 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
+    <dubbo:application name="demo-consumer"/>
+
     <!-- use multicast registry center to discover service -->
-    <dubbo:registry address="zookeeper://127.0.0.1:2181" default="true"/>
-    <dubbo:registry 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:servicestore address="zookeeper://127.0.0.1:2181"/>-->
+    <dubbo:configcenter type="zookeeper" address="127.0.0.1:2181" namespace="dubboregistrygroup1"
+                        dataid="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 0c4c6dc..3d2e2ed 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
@@ -25,10 +25,10 @@
     <dubbo:application name="demo-provider"/>
     <!--<dubbo:provider tag="tag3"/>-->
 
-    <!-- use multicast registry center to export service -->
-    <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"/>-->
+    <!--<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"/>
 
     <!-- use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
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 430a6ec..922387d 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
@@ -51,7 +51,7 @@ public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<R
         System.setProperty(ZooKeeperConfigurationSource.ARCHAIUS_CONFIG_CHECK_KEY, url.getParameter(Constants.CONFIG_CHECK_KEY, "false"));
 
         try {
-            ZooKeeperConfigurationSource zkConfigSource = new ZooKeeperConfigurationSource();
+            ZooKeeperConfigurationSource zkConfigSource = new ZooKeeperConfigurationSource(url);
             zkConfigSource.start();
             /*if (!zkConfigSource.isConnected()) {
                 // we can check the status of config center here, and decide to fail or continue if we cannot reach the config server.
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 7cdf108..ec48c2d 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,6 +27,8 @@ 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;
 import org.slf4j.LoggerFactory;
@@ -64,8 +66,11 @@ public class ZooKeeperConfigurationSource implements WatchedConfigurationSource,
 
     private List<WatchedUpdateListener> listeners = new CopyOnWriteArrayList<WatchedUpdateListener>();
 
-    public ZooKeeperConfigurationSource() {
+    private URL url;
+
+    public ZooKeeperConfigurationSource(URL url) {
         this(System.getProperty(ARCHAIUS_SOURCE_ADDRESS_KEY), 60 * 1000, 10000, System.getProperty(ARCHAIUS_CONFIG_ROOT_PATH_KEY, DEFAULT_CONFIG_ROOT_PATH));
+        this.url = url;
     }
 
     public ZooKeeperConfigurationSource(int sessionTimeout, int connectTimeout, String configRootPath) {
@@ -143,7 +148,7 @@ public class ZooKeeperConfigurationSource implements WatchedConfigurationSource,
                     return;
                 }
 
-                // TODO?
+                // TODO We limit the notification of config changes to a specific path level, for example /dubbo/config/service/configurators, other config changes not in this level will not get notified, say /dubbo/config/dubbo.properties
                 if (data.getPath().split("/").length == 5) {
                     byte[] value = data.getData();
                     String stringValue = new String(value, charset);
@@ -205,10 +210,14 @@ public class ZooKeeperConfigurationSource implements WatchedConfigurationSource,
 
         Map<String, ChildData> dataMap = treeCache.getCurrentChildren(configRootPath);
         if (dataMap != null && dataMap.size() > 0) {
-            dataMap.forEach((childPath, v) -> {
+            dataMap.forEach((childPath, childData) -> {
                 String fullChildPath = configRootPath + "/" + childPath;
-                treeCache.getCurrentChildren(fullChildPath).forEach((subChildPath, childData) -> {
-                    all.put(pathToKey(fullChildPath + "/" + subChildPath), new String(childData.getData(), charset));
+                // 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-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java
index 8d2dff1..e24fe24 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public final class ServiceDefinitionBuilder {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java
index 6158273..797d9f8 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java
@@ -31,7 +31,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class TypeDefinitionBuilder {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java
index 473bc1e..ce53c70 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java
@@ -23,7 +23,7 @@ import java.lang.reflect.Type;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class ArrayTypeBuilder implements TypeBuilder {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java
index df145f1..0f0efde 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java
@@ -26,7 +26,7 @@ import java.util.Collection;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class CollectionTypeBuilder implements TypeBuilder {
 
@@ -55,7 +55,7 @@ public class CollectionTypeBuilder implements TypeBuilder {
         if (actualTypeArgs == null || actualTypeArgs.length != 1) {
             throw new IllegalArgumentException(MessageFormat.format(
                     "[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}]." + actualTypeArgs,
-                    new Object[] { type, actualTypeArgs }));
+                    new Object[]{type, actualTypeArgs}));
         }
 
         Type actualType = actualTypeArgs[0];
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java
index 9ea8ac6..567b4b3 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java
@@ -57,7 +57,7 @@ public final class DefaultTypeBuilder {
             Class<?> fieldClass = field.getType();
             Type fieldType = field.getGenericType();
 
-            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType,fieldClass, typeCache);
+            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);
             td.getProperties().put(fieldName, fieldTd);
         }
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java
index 9aa07d7..cca8c9c 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java
@@ -23,7 +23,7 @@ import java.lang.reflect.Type;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class EnumTypeBuilder implements TypeBuilder {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java
index 5aed982..131d971 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java
@@ -25,7 +25,7 @@ import java.text.MessageFormat;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class MapTypeBuilder implements TypeBuilder {
 
@@ -53,8 +53,8 @@ public class MapTypeBuilder implements TypeBuilder {
         Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
         if (actualTypeArgs == null || actualTypeArgs.length != 2) {
             throw new IllegalArgumentException(MessageFormat.format(
-                    "[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}]." + actualTypeArgs, new Object[] {
-                            type, actualTypeArgs }));
+                    "[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}]." + actualTypeArgs, new Object[]{
+                            type, actualTypeArgs}));
         }
 
         for (Type actualType : actualTypeArgs) {
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java
index b0fbd85..ef79a3f 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java
@@ -22,7 +22,7 @@ import java.lang.reflect.Type;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public interface TypeBuilder {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java
index 263d34c..bbec7b5 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java
@@ -19,11 +19,11 @@ package org.apache.dubbo.metadata.definition.model;
 import java.util.Map;
 
 /**
- *  2018/10/25
+ * 2018/10/25
  */
-public class FullServiceDefinition extends ServiceDefinition{
+public class FullServiceDefinition extends ServiceDefinition {
 
-    private Map<String,String> parameters;
+    private Map<String, String> parameters;
 
     public Map<String, String> getParameters() {
         return parameters;
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java
index 45da103..fe9e054 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java
@@ -21,7 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class MethodDefinition {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/ServiceDefinition.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/ServiceDefinition.java
index 3202a30..af60f43 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/ServiceDefinition.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/ServiceDefinition.java
@@ -20,7 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class ServiceDefinition {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/TypeDefinition.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/TypeDefinition.java
index 4a7e3ac..8d1c582 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/TypeDefinition.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/TypeDefinition.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class TypeDefinition {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java
index c313fa7..54fc655 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java
@@ -26,15 +26,14 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public final class ClassUtils {
 
     /**
      * Get the code source file or class path of the Class passed in.
      *
-     * @param clazz
-     *            Class to find.
+     * @param clazz Class to find.
      * @return Jar file name or class path.
      */
     public static String getCodeSource(Class<?> clazz) {
@@ -60,8 +59,7 @@ public final class ClassUtils {
     /**
      * Get all non-static fields of the Class passed in or its super classes.
      *
-     * @param clazz
-     *            Class to parse.
+     * @param clazz Class to parse.
      * @return field list
      */
     public static List<Field> getNonStaticFields(final Class<?> clazz) {
@@ -90,8 +88,7 @@ public final class ClassUtils {
     /**
      * Get all public, non-static methods of the Class passed in.
      *
-     * @param clazz
-     *            Class to parse.
+     * @param clazz Class to parse.
      * @return methods list
      */
     public static List<Method> getPublicNonStaticMethods(final Class<?> clazz) {
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java
index f1066a9..3a7dda1 100755
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java
@@ -20,7 +20,7 @@ import java.io.InputStream;
 import java.util.Properties;
 
 /**
- *  2015/1/27.
+ * 2015/1/27.
  */
 public class JaketConfigurationUtils {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataTest.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataTest.java
index 20e33e1..7ae9c97 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataTest.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataTest.java
@@ -29,8 +29,8 @@ import org.junit.Test;
 
 /**
  * TypeDefinitionBuilder
- *
- *  16/9/22.
+ * <p>
+ * 16/9/22.
  */
 public class MetadataTest {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataUtils.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataUtils.java
index 8d16f77..14ae62f 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataUtils.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataUtils.java
@@ -27,7 +27,7 @@ import java.util.List;
 
 /**
  * generate metadata
- *
+ * <p>
  * 2017-4-17 14:33:24
  */
 public class MetadataUtils {
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ClassExtendsMap.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ClassExtendsMap.java
index cfe413d..eacd124 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ClassExtendsMap.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ClassExtendsMap.java
@@ -23,7 +23,8 @@ public class ClassExtendsMap extends HashMap<String, Object> {
     private static final long serialVersionUID = 5108356684263812575L;
     private ClassExtendsMap resultMap;
 
-    public ClassExtendsMap() {}
+    public ClassExtendsMap() {
+    }
 
     public ClassExtendsMap getResultMap() {
         return resultMap;
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/OuterClass.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/OuterClass.java
index 3ee2b4f..8f3f9df 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/OuterClass.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/OuterClass.java
@@ -17,7 +17,7 @@
 package org.apache.dubbo.metadata.definition.common;
 
 /**
- *  16/9/22.
+ * 16/9/22.
  */
 public class OuterClass {
 
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ResultWithRawCollections.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ResultWithRawCollections.java
index 7ed8e55..e17b16b 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ResultWithRawCollections.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ResultWithRawCollections.java
@@ -28,7 +28,8 @@ public class ResultWithRawCollections {
     private Map map;
     private List list;
 
-    public ResultWithRawCollections() {}
+    public ResultWithRawCollections() {
+    }
 
     public ResultWithRawCollections(Map map, List list) {
         this.map = map;
diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/TestService.java b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/TestService.java
index 37a3c94..bbf29a3 100644
--- a/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/TestService.java
+++ b/dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/TestService.java
@@ -17,7 +17,7 @@
 package org.apache.dubbo.metadata.definition.common;
 
 /**
- *  16/9/22.
+ * 16/9/22.
  */
 public interface TestService {
     /**
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/ConsumerMetadataIdentifier.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/ConsumerMetadataIdentifier.java
index f9c40f2..f4a17ce 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/ConsumerMetadataIdentifier.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/ConsumerMetadataIdentifier.java
@@ -17,9 +17,11 @@ public class ConsumerMetadataIdentifier extends MetadataIdentifier {
 
     private String application;
 
-    protected String getPathSegment(){
+    protected String getPathSegment() {
         return Constants.PATH_SEPARATOR + application;
-    };
+    }
+
+    ;
 
     public String getApplication() {
         return application;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
index 23a055d..f3c1cbc 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
@@ -3,8 +3,6 @@ package org.apache.dubbo.metadata.identifier;
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 
-import java.io.File;
-
 /**
  * @author cvictory ON 2018/10/25
  */
@@ -47,9 +45,11 @@ public class MetadataIdentifier {
         return URL.encode(serviceInterface);
     }
 
-    protected String getPathSegment(){
+    protected String getPathSegment() {
         return "";
-    };
+    }
+
+    ;
 
     public String getServiceInterface() {
         return serviceInterface;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java
index fa96538..89f075b 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java
@@ -16,14 +16,11 @@
  */
 package org.apache.dubbo.metadata.integration;
 
-import org.apache.commons.lang3.time.DateUtils;
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder;
 import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;
@@ -33,13 +30,6 @@ import org.apache.dubbo.metadata.store.MetadataReport;
 import org.apache.dubbo.metadata.store.MetadataReportFactory;
 import org.apache.dubbo.rpc.RpcException;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 
 /**
@@ -85,7 +75,7 @@ public class MetadataReportService {
     public void publishProvider(URL providerUrl) throws RpcException {
         //first add into the list
         // remove the individul param
-        providerUrl = providerUrl.removeParameters(Constants.PID_KEY,Constants.TIMESTAMP_KEY,Constants.BIND_IP_KEY,Constants.BIND_PORT_KEY,Constants.TIMESTAMP_KEY);
+        providerUrl = providerUrl.removeParameters(Constants.PID_KEY, Constants.TIMESTAMP_KEY, Constants.BIND_IP_KEY, Constants.BIND_PORT_KEY, Constants.TIMESTAMP_KEY);
         try {
             String interfaceName = providerUrl.getParameter(Constants.INTERFACE_KEY);
             if (StringUtils.isNotEmpty(interfaceName)) {
@@ -103,7 +93,7 @@ public class MetadataReportService {
     }
 
     public void publishConsumer(URL consumerURL) throws RpcException {
-        consumerURL = consumerURL.removeParameters(Constants.PID_KEY,Constants.TIMESTAMP_KEY,Constants.BIND_IP_KEY,Constants.BIND_PORT_KEY,Constants.TIMESTAMP_KEY);
+        consumerURL = consumerURL.removeParameters(Constants.PID_KEY, Constants.TIMESTAMP_KEY, Constants.BIND_IP_KEY, Constants.BIND_PORT_KEY, Constants.TIMESTAMP_KEY);
         metadataReport.storeConsumerMetadata(new ConsumerMetadataIdentifier(consumerURL.getServiceInterface(),
                 consumerURL.getParameter(Constants.VERSION_KEY), consumerURL.getParameter(Constants.GROUP_KEY),
                 consumerURL.getParameter(Constants.APPLICATION_KEY)), consumerURL.toParameterString());
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
index aa1528d..eb9fb61 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
@@ -100,7 +100,7 @@ public abstract class AbstractMetadataReport implements MetadataReport {
         loadProperties();
         metadataReportRetry = new MetadataReportRetry(reportURL.getParameter(Constants.RETRY_TIMES_KEY, 60 * 60), reportURL.getParameter(Constants.RETRY_PERIOD_KEY, 3000));
         // cycle report the data switch
-        if(reportURL.getParameter(Constants.CYCLE_REPORT_KEY, true)){
+        if (reportURL.getParameter(Constants.CYCLE_REPORT_KEY, true)) {
             scheduler.scheduleAtFixedRate(new Runnable() {
                 @Override
                 public void run() {
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactory.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactory.java
index c97d745..392350c 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactory.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactory.java
@@ -18,13 +18,9 @@ package org.apache.dubbo.metadata.support;
 
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.metadata.store.MetadataReport;
 import org.apache.dubbo.metadata.store.MetadataReportFactory;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReport4Test.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReport4Test.java
index b15abe2..e3964af 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReport4Test.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReport4Test.java
@@ -22,8 +22,8 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.metadata.identifier.ConsumerMetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.ProviderMetadataIdentifier;
-import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 import org.apache.dubbo.metadata.support.AbstractMetadataReport;
+import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReportFactory4Test.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReportFactory4Test.java
index 9d77abb..23437b8 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReportFactory4Test.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReportFactory4Test.java
@@ -17,9 +17,9 @@
 package org.apache.dubbo.metadata.store.test;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 import org.apache.dubbo.metadata.store.MetadataReport;
 import org.apache.dubbo.metadata.support.AbstractMetadataReportFactory;
+import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
 /**
  * ZookeeperRegistryFactory.
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactoryTest.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactoryTest.java
index beb7594..6a808c1 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactoryTest.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactoryTest.java
@@ -1,6 +1,7 @@
 package org.apache.dubbo.metadata.support;
 
 import com.alibaba.fastjson.JSON;
+
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java b/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
index 135020b..d6a6607 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
@@ -22,8 +22,8 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.metadata.identifier.ConsumerMetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.ProviderMetadataIdentifier;
-import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.metadata.support.AbstractMetadataReport;
+import org.apache.dubbo.rpc.RpcException;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;
 import redis.clients.jedis.JedisPoolConfig;
diff --git a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
index 22b926c..901601f 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
@@ -24,12 +24,10 @@ import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.metadata.identifier.ConsumerMetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.ProviderMetadataIdentifier;
+import org.apache.dubbo.metadata.support.AbstractMetadataReport;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
-import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.metadata.support.AbstractMetadataReport;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -92,7 +90,7 @@ public class ZookeeperMetadataReport extends AbstractMetadataReport {
         zkClient.create(filePath, false);
     }
 
-    String getCategory(MetadataIdentifier metadataIdentifier){
+    String getCategory(MetadataIdentifier metadataIdentifier) {
         return toRootDir() + metadataIdentifier.getFilePathKey();
     }
 
diff --git a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
index 6389822..4e8902c 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
@@ -17,9 +17,9 @@
 package org.apache.dubbo.metadata.store.zookeeper;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 import org.apache.dubbo.metadata.store.MetadataReport;
 import org.apache.dubbo.metadata.support.AbstractMetadataReportFactory;
+import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
 /**
  * ZookeeperRegistryFactory.
diff --git a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java
index b0227e6..93b9c08 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java
@@ -10,7 +10,6 @@ import org.apache.dubbo.metadata.identifier.ConsumerMetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
 import org.apache.dubbo.metadata.identifier.ProviderMetadataIdentifier;
 import org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter;
-import org.apache.dubbo.rpc.RpcException;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
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 e113b93..480c3a8 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,14 +52,16 @@ public class ZKTools {
     }
 
     public static void testStartupConfig() {
-        String str = "dubbo.registry.address=\"zookeeper://127.0.0.1:2181\"\n" +
-                "dubbo.registry.group=\"dubboregistrygroup1\"\n" +
-                "dubbo.servicestore.address=\"zookeeper://127.0.0.1:2181\"\n" +
+        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
+                "dubbo.registry.group=dubboregistrygroup1\n" +
+                "dubbo.servicestore.address=zookeeper://127.0.0.1:2181\n" +
                 "dubbo.protocol.port=20990\n" +
                 "dubbo.service.org.apache.dubbo.demo.DemoService.timeout=9999\n";
 
+        System.out.println(str);
+
         try {
-            String path = "/dubboregistrygroup1/dubbo.properties";
+            String path = "/dubboregistrygroup1/config/dubbo.properties";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }