You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/08/31 03:23:39 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2075]change service definition configuration keys (#1933)

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ea823b  [SCB-2075]change service definition configuration keys (#1933)
1ea823b is described below

commit 1ea823b8b90d7854e75603928dc2baf245f8be1c
Author: bao liu <bi...@qq.com>
AuthorDate: Mon Aug 31 11:23:30 2020 +0800

    [SCB-2075]change service definition configuration keys (#1933)
    
    * [SCB-2075]change service definition configuration keys
    
    * [SCB-2075]fix bugs
---
 .../definition/schema/StaticSchemaFactoryTest.java | 144 ----------
 .../src/main/resources/microservice.yaml           |   7 +-
 .../src/main/resources/microservice.yaml           |   7 +-
 .../config/client/ConfigCenterConfig.java          |  22 +-
 .../servicecomb/config/kie/client/KieConfig.java   |  23 +-
 .../common/base/ServiceCombConstants.java          |  27 --
 .../servicecomb/config/BootStrapProperties.java    | 296 +++++++++++++++++++++
 .../org/apache/servicecomb/config/ConfigUtil.java  |   5 +-
 .../servicecomb/registry/DiscoveryManager.java     |   7 -
 .../registry/api/registry/MicroserviceFactory.java |  59 ++--
 .../api/registry/MicroserviceInstance.java         |  10 +-
 .../registry/config/AbstractPropertiesLoader.java  |  46 +---
 .../registry/config/ConfigurePropertyUtils.java    |   3 +-
 .../registry/config/InstancePropertiesLoader.java  |  15 +-
 .../config/MicroservicePropertiesLoader.java       |  14 +-
 .../registry/definition/DefinitionConst.java       |  25 +-
 .../definition/MicroserviceDefinition.java         | 154 -----------
 .../config/TestAbstractPropertiesLoader.java       |  10 +-
 .../tracing/zipkin/TracingConfiguration.java       |   6 +-
 .../apache/servicecomb/it/schema/TraceSchema.java  |   7 +-
 .../localregistry/LocalRegistryStore.java          |   7 +-
 .../servicecomb/localregistry/RegistryBean.java    |  14 +-
 .../schemadiscovery/SchemaDiscovery.java           |   6 +-
 .../servicecomb/serviceregistry/RegistryUtils.java |  17 +-
 .../serviceregistry/ServiceRegistry.java           |   2 -
 .../registry/AbstractServiceRegistry.java          |  15 +-
 .../registry/RemoteServiceRegistry.java            |   6 +-
 .../registry/ServiceRegistryFactory.java           |  10 +-
 .../task/MicroserviceRegisterTask.java             |  11 +-
 .../api/registry/TestMicroserviceFactory.java      |  83 ++----
 .../client/LocalServiceRegistryClientImpl.java     |  19 +-
 .../client/http/TestClientHttp.java                |  11 +-
 .../client/http/TestServiceRegistryClientImpl.java |  18 +-
 .../config/TestPropertiesLoader.java               |  45 ++--
 .../registry/EmptyMockServiceRegistry.java         |   6 -
 .../registry/LocalServiceRegistry.java             |   6 +-
 .../registry/LocalServiceRegistryFactory.java      |  15 +-
 .../registry/TestRemoteServiceRegistry.java        |  14 +-
 .../registry/TestServiceRegistryFactory.java       |  19 +-
 .../src/test/resources/microservice.yaml           |   4 +-
 .../zeroconfig/client/ZeroConfigClient.java        |  32 ++-
 41 files changed, 537 insertions(+), 710 deletions(-)

diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/schema/StaticSchemaFactoryTest.java b/core/src/test/java/org/apache/servicecomb/core/definition/schema/StaticSchemaFactoryTest.java
deleted file mode 100644
index ac21d45..0000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/schema/StaticSchemaFactoryTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.core.definition.schema;
-
-public class StaticSchemaFactoryTest {
-//
-//  private static final StaticSchemaFactory staticSchemaFactory = new StaticSchemaFactory();
-//
-//  private static final String APPLICATION_ID_KEY = "APPLICATION_ID";
-//
-//  private static final String APP_ID_VALUE = "appIdTest";
-//
-//  @BeforeClass
-//  public static void beforeClass() {
-//    System.setProperty(APPLICATION_ID_KEY, APP_ID_VALUE);
-//    new UnitTestMeta();
-//
-//    SchemaLoader schemaLoader = new SchemaLoader();
-//    ReflectUtils.setField(staticSchemaFactory, "schemaLoader", schemaLoader);
-//  }
-//
-//  @AfterClass
-//  public static void afterClass() {
-//    TestProducerSchemaFactory.teardown();
-//    System.clearProperty(APPLICATION_ID_KEY);
-//  }
-//
-//  @Test
-//  public void testLoadSchema() {
-//    String serviceAndSchemaName = "3rdPartyService";
-//    StaticMicroservice staticMicroservice = new StaticMicroservice();
-//    staticMicroservice.setSchemaIntfCls(Test3rdPartyServiceIntf.class);
-//    MicroserviceMeta microserviceMeta = new MicroserviceMeta(serviceAndSchemaName);
-//    staticSchemaFactory.loadSchema(microserviceMeta, staticMicroservice);
-//
-//    SchemaMeta schemaMeta = microserviceMeta.findSchemaMeta(serviceAndSchemaName);
-//    Assert.assertEquals(EXPECTED_SCHEMA_CONTENT,
-//        SwaggerUtils.swaggerToString(schemaMeta.getSwagger()));
-//
-//    Assert.assertEquals(2, schemaMeta.getOperations().size());
-//    OperationMeta operationMeta = schemaMeta.ensureFindOperation("add");
-//    Assert.assertEquals("add", operationMeta.getOperationId());
-//    Method swaggerProducerMethod = operationMeta.getMethod();
-//    Class<?>[] parameterTypes = swaggerProducerMethod.getParameterTypes();
-//    Assert.assertEquals(2, parameterTypes.length);
-//    Assert.assertEquals(Integer.class, parameterTypes[0]);
-//    Assert.assertEquals(Integer.class, parameterTypes[1]);
-//    Assert.assertEquals(Integer.class, swaggerProducerMethod.getGenericReturnType());
-//
-//    operationMeta = schemaMeta.ensureFindOperation("addAsync");
-//    Assert.assertEquals("addAsync", operationMeta.getOperationId());
-//    swaggerProducerMethod = operationMeta.getMethod();
-//    parameterTypes = swaggerProducerMethod.getParameterTypes();
-//    Assert.assertEquals(2, parameterTypes.length);
-//    Assert.assertEquals(Integer.class, parameterTypes[0]);
-//    Assert.assertEquals(Integer.class, parameterTypes[1]);
-//    // ensure reactive operation's return type is set correctly, not CompletableFuture<T>
-//    Assert.assertEquals(Integer.class, swaggerProducerMethod.getGenericReturnType());
-//  }
-//
-//  @Path("/3rdParty")
-//  interface Test3rdPartyServiceIntf {
-//
-//    @Path("/add")
-//    @GET
-//    int add(@QueryParam("x") int x, @QueryParam("y") int y);
-//
-//    @Path("/addAsync")
-//    @GET
-//    CompletableFuture<Integer> addAsync(@QueryParam("x") int x, @QueryParam("y") int y);
-//  }
-//
-//  private static final String EXPECTED_SCHEMA_CONTENT = "---\n"
-//      + "swagger: \"2.0\"\n"
-//      + "info:\n"
-//      + "  version: \"1.0.0\"\n"
-//      + "  title: \"swagger definition for org.apache.servicecomb.core.definition.schema.StaticSchemaFactoryTest$Test3rdPartyServiceIntf\"\n"
-//      + "  x-java-interface: \"cse.gen.appIdTest._3rdPartyService._3rdPartyService.Test3rdPartyServiceIntfIntf\"\n"
-//      + "basePath: \"/3rdParty\"\n"
-//      + "consumes:\n"
-//      + "- \"application/json\"\n"
-//      + "produces:\n"
-//      + "- \"application/json\"\n"
-//      + "paths:\n"
-//      + "  /add:\n"
-//      + "    get:\n"
-//      + "      operationId: \"add\"\n"
-//      + "      parameters:\n"
-//      + "      - name: \"x\"\n"
-//      + "        in: \"query\"\n"
-//      + "        required: false\n"
-//      + "        type: \"integer\"\n"
-//      + "        default: 0\n"
-//      + "        format: \"int32\"\n"
-//      + "      - name: \"y\"\n"
-//      + "        in: \"query\"\n"
-//      + "        required: false\n"
-//      + "        type: \"integer\"\n"
-//      + "        default: 0\n"
-//      + "        format: \"int32\"\n"
-//      + "      responses:\n"
-//      + "        200:\n"
-//      + "          description: \"response of 200\"\n"
-//      + "          schema:\n"
-//      + "            type: \"integer\"\n"
-//      + "            format: \"int32\"\n"
-//      + "  /addAsync:\n"
-//      + "    get:\n"
-//      + "      operationId: \"addAsync\"\n"
-//      + "      parameters:\n"
-//      + "      - name: \"x\"\n"
-//      + "        in: \"query\"\n"
-//      + "        required: false\n"
-//      + "        type: \"integer\"\n"
-//      + "        default: 0\n"
-//      + "        format: \"int32\"\n"
-//      + "      - name: \"y\"\n"
-//      + "        in: \"query\"\n"
-//      + "        required: false\n"
-//      + "        type: \"integer\"\n"
-//      + "        default: 0\n"
-//      + "        format: \"int32\"\n"
-//      + "      responses:\n"
-//      + "        200:\n"
-//      + "          description: \"response of 200\"\n"
-//      + "          schema:\n"
-//      + "            type: \"integer\"\n"
-//      + "            format: \"int32\"\n";
-}
\ No newline at end of file
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/resources/microservice.yaml b/demo/demo-jaxrs/jaxrs-client/src/main/resources/microservice.yaml
index c824285..89a8e48 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/resources/microservice.yaml
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/resources/microservice.yaml
@@ -15,12 +15,11 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-APPLICATION_ID: jaxrstest
-service_description:
-  name: jaxrsClient
-  version: 0.0.1
 servicecomb:
   service:
+    application: jaxrstest
+    name: jaxrsClient
+    version: 0.0.1
     registry:
       address: http://127.0.0.1:30100
   handler:
diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml b/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
index 83ed4f4..76d1821 100644
--- a/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
+++ b/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
@@ -15,12 +15,11 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-APPLICATION_ID: jaxrstest
-service_description:
-  name: jaxrs
-  version: 0.0.2
 servicecomb:
   service:
+    application: jaxrstest
+    name: jaxrs
+    version: 0.0.2
     registry:
       address: http://127.0.0.1:30100
   rest:
diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
index e0ff19a..609dae9 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
+++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
@@ -17,11 +17,9 @@
 
 package org.apache.servicecomb.config.client;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_SERVICECOMB_ENV;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICECOMB_ENV;
-
 import java.util.List;
 
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.deployment.Deployment;
 import org.apache.servicecomb.deployment.DeploymentProvider;
 import org.apache.servicecomb.foundation.vertx.VertxConst;
@@ -52,14 +50,6 @@ public final class ConfigCenterConfig {
 
   private static final String FIRST_REFRESH_INTERVAL = "servicecomb.config.client.first_refresh_interval";
 
-  private static final String SERVICE_NAME = "service_description.name";
-
-  private static final String SERVICE_VERSION = "service_description.version";
-
-  private static final String APPLICATION_NAME = "APPLICATION_ID";
-
-  private static final String INSTANCE_TAGS = "instance_description.properties.tags";
-
   public static final String CONNECTION_TIME_OUT = "servicecomb.config.client.timeout.connection";
 
   public static final String EVENT_LOOP_SIZE = "servicecomb.config.client.eventLoopSize";
@@ -141,19 +131,19 @@ public final class ConfigCenterConfig {
 
   @SuppressWarnings("unchecked")
   public String getServiceName() {
-    String service = finalConfig.getString(SERVICE_NAME);
-    String appName = finalConfig.getString(APPLICATION_NAME);
+    String service = BootStrapProperties.readServiceName(finalConfig);
+    String appName = BootStrapProperties.readApplication(finalConfig);
     String tags;
     if (appName != null) {
       service = service + "@" + appName;
     }
 
-    String serviceVersion = finalConfig.getString(SERVICE_VERSION);
+    String serviceVersion = BootStrapProperties.readServiceVersion(finalConfig);
     if (serviceVersion != null) {
       service = service + "#" + serviceVersion;
     }
 
-    Object o = finalConfig.getProperty(INSTANCE_TAGS);
+    Object o = BootStrapProperties.readServiceInstanceTags(finalConfig);
     if (o == null) {
       return service;
     }
@@ -191,6 +181,6 @@ public final class ConfigCenterConfig {
   }
 
   public String getEnvironment() {
-    return finalConfig.getString(SERVICECOMB_ENV, DEFAULT_SERVICECOMB_ENV);
+    return BootStrapProperties.readServiceEnvironment(finalConfig);
   }
 }
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
index bc80598..38c68bf 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
@@ -17,9 +17,7 @@
 
 package org.apache.servicecomb.config.kie.client;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_SERVICECOMB_ENV;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICECOMB_ENV;
-
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.foundation.vertx.VertxConst;
 
 import com.netflix.config.ConcurrentCompositeConfiguration;
@@ -40,14 +38,6 @@ public class KieConfig {
 
   private static final String ENABLE_LONG_POLLING = "servicecomb.kie.enableLongPolling";
 
-  private static final String APPLICATION_NAME = "APPLICATION_ID";
-
-  private static final String SERVICE_NAME = "service_description.name";
-
-  private static final String SERVICE_VERSION = "service_description.version";
-
-  private static final String INSTANCE_TAGS = "instance_description.properties.tags";
-
   public static final String CONNECTION_TIME_OUT = "servicecomb.kie.client.timeout.connection";
 
   public static final String EVENT_LOOP_SIZE = "servicecomb.kie.client.eventLoopSize";
@@ -90,23 +80,23 @@ public class KieConfig {
   }
 
   public String getVersion() {
-    return finalConfig.getString(SERVICE_VERSION);
+    return BootStrapProperties.readServiceVersion(finalConfig);
   }
 
   public String getServiceName() {
-    return finalConfig.getString(SERVICE_NAME);
+    return BootStrapProperties.readServiceName(finalConfig);
   }
 
   public String getTags() {
-    return finalConfig.getString(INSTANCE_TAGS);
+    return BootStrapProperties.readServiceInstanceTags(finalConfig);
   }
 
   public String getEnvironment() {
-    return finalConfig.getString(SERVICECOMB_ENV, DEFAULT_SERVICECOMB_ENV);
+    return BootStrapProperties.readServiceEnvironment(finalConfig);
   }
 
   public String getAppName() {
-    return finalConfig.getString(APPLICATION_NAME);
+    return BootStrapProperties.readApplication(finalConfig);
   }
 
   public String getDomainName() {
@@ -148,5 +138,4 @@ public class KieConfig {
   public String getProxyPasswd() {
     return finalConfig.getString(VertxConst.PROXY_PASSWD, null);
   }
-
 }
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/ServiceCombConstants.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/ServiceCombConstants.java
index 53214fa..73a0e55 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/ServiceCombConstants.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/ServiceCombConstants.java
@@ -18,25 +18,6 @@
 package org.apache.servicecomb.foundation.common.base;
 
 public interface ServiceCombConstants {
-
-  String CONFIG_APPLICATION_ID_KEY = "APPLICATION_ID";
-
-  String CONFIG_SERVICE_DESCRIPTION_KEY = "service_description";
-
-  String CONFIG_MICROSERVICE_NAME_KEY = "name";
-
-  String CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY = CONFIG_SERVICE_DESCRIPTION_KEY + "." + CONFIG_MICROSERVICE_NAME_KEY;
-
-  String CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY = CONFIG_SERVICE_DESCRIPTION_KEY + ".version";
-
-  String CONFIG_QUALIFIED_MICROSERVICE_ROLE_KEY = CONFIG_SERVICE_DESCRIPTION_KEY + ".role";
-
-  String CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY = CONFIG_SERVICE_DESCRIPTION_KEY + ".description";
-
-  String DEFAULT_MICROSERVICE_NAME = "defaultMicroservice";
-
-  String DEFAULT_APPLICATION_ID = "defaultApplicationId";
-
   String CONFIG_TRACING_COLLECTOR_ADDRESS = "servicecomb.tracing.collector.address";
 
   String CONFIG_TRACING_COLLECTOR_API_V1 = "v1";
@@ -45,8 +26,6 @@ public interface ServiceCombConstants {
 
   String CONFIG_TRACING_COLLECTOR_API_VERSION = "servicecomb.tracing.collector.apiVersion";
 
-  String CONFIG_TRACING_ENABLED_KEY = "servicecomb.tracing.enabled";
-
   String CONFIG_TRACING_COLLECTOR_PATH = "/api/{0}/spans";
 
   String DEFAULT_TRACING_COLLECTOR_ADDRESS = "http://127.0.0.1:9411";
@@ -61,14 +40,8 @@ public interface ServiceCombConstants {
 
   String CONFIG_DEFAULT_REGISTER_BY = "SDK";
 
-  String SERVICECOMB_ENV = "service_description.environment";
-
-  String DEFAULT_SERVICECOMB_ENV = "";
-
   String DEVELOPMENT_SERVICECOMB_ENV = "development";
 
-  String PRODUCTION_SERVICECOMB_ENV = "production";
-
   String SERVICE_MAPPING = "SERVICE_MAPPING";
 
   String VERSION_MAPPING = "VERSION_MAPPING";
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java
new file mode 100644
index 0000000..97c18a8
--- /dev/null
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/BootStrapProperties.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.config;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.Configuration;
+import org.springframework.util.StringUtils;
+
+/**
+ * This class holds configurations that need to be configured
+ * through property files or environment variables.
+ */
+public class BootStrapProperties {
+  // start of : service definition keys
+  // service definition keys of old version
+  public static final String OLD_CONFIG_SERVICE_APPLICATION = "APPLICATION_ID";
+
+  public static final String OLD_CONFIG_SERVICE_NAME = "service_description.name";
+
+  public static final String OLD_CONFIG_SERVICE_VERSION = "service_description.version";
+
+  public static final String OLD_CONFIG_SERVICE_ROLE = "service_description.role";
+
+  public static final String OLD_CONFIG_SERVICE_DESCRIPTION = "service_description.description";
+
+  public static final String OLD_CONFIG_SERVICE_ENVIRONMENT = "service_description.environment";
+
+  public static final String OLD_CONFIG_SERVICE_EXTENDED_CLASS = "service_description.propertyExtendedClass";
+
+  public static final String OLD_CONFIG_SERVICE_PROPERTIES = "service_description.properties";
+
+  public static final String OLD_CONFIG_SERVICE_PATHS = "service_description.paths";
+
+  // service instance definition keys of old version
+  public static final String OLD_CONFIG_SERVICE_INSTANCE_PROPERTIES = "instance_description.properties";
+
+  public static final String OLD_CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS = "instance_description.propertyExtendedClass";
+
+  public static final String OLD_CONFIG_SERVICE_INSTANCE_ENVIRONMENT = "instance_description.environment";
+
+  public static final String OLD_CONFIG_SERVICE_INSTANCE_INITIAL_STATUS = "instance_description.initialStatus";
+
+  private static final String OLD_CONFIG_SERVICE_INSTANCE_TAGS = "instance_description.properties.tags";
+
+  // service definition keys of new version
+  public static final String CONFIG_SERVICE_APPLICATION = "servicecomb.service.application";
+
+  public static final String CONFIG_SERVICE_NAME = "servicecomb.service.name";
+
+  public static final String CONFIG_SERVICE_VERSION = "servicecomb.service.version";
+
+  public static final String CONFIG_SERVICE_ROLE = "servicecomb.service.role";
+
+  public static final String CONFIG_SERVICE_DESCRIPTION = "servicecomb.service.description";
+
+  public static final String CONFIG_SERVICE_ENVIRONMENT = "servicecomb.service.environment";
+
+  public static final String CONFIG_SERVICE_EXTENDED_CLASS = "servicecomb.service.propertyExtendedClass";
+
+  public static final String CONFIG_SERVICE_PROPERTIES = "servicecomb.service.properties";
+
+  public static final String CONFIG_SERVICE_PATHS = "servicecomb.service.paths";
+
+  // service instance definition keys of new version
+  public static final String CONFIG_SERVICE_INSTANCE_PROPERTIES = "servicecomb.instance.properties";
+
+  public static final String CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS = "servicecomb.instance.propertyExtendedClass";
+
+  public static final String CONFIG_SERVICE_INSTANCE_ENVIRONMENT = "servicecomb.instance.environment";
+
+  public static final String CONFIG_SERVICE_INSTANCE_INITIAL_STATUS = "servicecomb.instance.initialStatus";
+
+  private static final String CONFIG_SERVICE_INSTANCE_TAGS = "servicecomb.instance.properties.tags";
+
+  // configuration default values
+  public static final String DEFAULT_APPLICATION = "default";
+
+  public static final String DEFAULT_MICROSERVICE_NAME = "defaultMicroservice";
+
+  public static final String DEFAULT_MICROSERVICE_VERSION = "1.0.0.0";
+
+  public static final String DEFAULT_MICROSERVICE_ROLE = "FRONT";
+
+  public static final String DEFAULT_MICROSERVICE_ENVIRONMENT = "";
+
+  public static final String DEFAULT_MICROSERVICE_INSTANCE_ENVIRONMENT = "production";
+
+  public static final String DEFAULT_MICROSERVICE_INSTANCE_INITIAL_STATUS = "UP";
+
+  private static final Configuration configuration = ConfigUtil.createLocalConfig();
+
+  public static String readApplication(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_APPLICATION,
+        OLD_CONFIG_SERVICE_APPLICATION, DEFAULT_APPLICATION);
+  }
+
+  public static String readApplication() {
+    return readApplication(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceName(Configuration configuration) {
+    String result = readStringValue(configuration, CONFIG_SERVICE_NAME, OLD_CONFIG_SERVICE_NAME,
+        DEFAULT_MICROSERVICE_NAME);
+    checkMicroserviceName(result);
+    return result;
+  }
+
+  public static String readServiceName() {
+    return readServiceName(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceVersion(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_VERSION, OLD_CONFIG_SERVICE_VERSION,
+        DEFAULT_MICROSERVICE_VERSION);
+  }
+
+  public static String readServiceVersion() {
+    return readServiceVersion(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceRole(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_ROLE, OLD_CONFIG_SERVICE_ROLE, DEFAULT_MICROSERVICE_ROLE);
+  }
+
+  public static String readServiceRole() {
+    return readServiceRole(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceDescription(Configuration configuration) {
+    String[] descriptionArray = configuration.getStringArray(CONFIG_SERVICE_DESCRIPTION);
+    if (null == descriptionArray || descriptionArray.length < 1) {
+      descriptionArray = configuration.getStringArray(OLD_CONFIG_SERVICE_DESCRIPTION);
+    }
+
+    if (null == descriptionArray || descriptionArray.length < 1) {
+      return null;
+    }
+
+    StringBuilder rawDescriptionBuilder = new StringBuilder();
+    for (String desc : descriptionArray) {
+      rawDescriptionBuilder.append(desc).append(",");
+    }
+
+    return rawDescriptionBuilder.substring(0, rawDescriptionBuilder.length() - 1);
+  }
+
+  public static String readServiceDescription() {
+    return readServiceDescription(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceEnvironment(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_ENVIRONMENT, OLD_CONFIG_SERVICE_ENVIRONMENT,
+        DEFAULT_MICROSERVICE_ENVIRONMENT);
+  }
+
+  public static String readServiceEnvironment() {
+    return readServiceEnvironment(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceExtendedClass(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_EXTENDED_CLASS, OLD_CONFIG_SERVICE_EXTENDED_CLASS,
+        null);
+  }
+
+  public static String readServiceExtendedClass() {
+    return readServiceExtendedClass(BootStrapProperties.configuration);
+  }
+
+  public static Map<String, String> readServiceProperties(Configuration configuration) {
+    return readProperties(configuration, CONFIG_SERVICE_PROPERTIES, OLD_CONFIG_SERVICE_PROPERTIES);
+  }
+
+  public static Map<String, String> readServiceProperties() {
+    return readServiceProperties(BootStrapProperties.configuration);
+  }
+
+  public static List<Object> readServicePaths(Configuration configuration) {
+    List<Object> result = configuration.getList(CONFIG_SERVICE_PATHS);
+    if (result == null || result.isEmpty()) {
+      result = configuration.getList(OLD_CONFIG_SERVICE_PATHS);
+    }
+    return result;
+  }
+
+  public static List<Object> readServicePaths() {
+    return readServicePaths(BootStrapProperties.configuration);
+  }
+
+  public static Map<String, String> readServiceInstanceProperties(Configuration configuration) {
+    return readProperties(configuration, CONFIG_SERVICE_INSTANCE_PROPERTIES, OLD_CONFIG_SERVICE_INSTANCE_PROPERTIES);
+  }
+
+  public static Map<String, String> readServiceInstanceProperties() {
+    return readServiceInstanceProperties(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceInstanceExtendedClass(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS,
+        OLD_CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS,
+        null);
+  }
+
+  public static String readServiceInstanceExtendedClass() {
+    return readServiceInstanceExtendedClass(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceInstanceEnvironment(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_ENVIRONMENT,
+        OLD_CONFIG_SERVICE_INSTANCE_ENVIRONMENT,
+        DEFAULT_MICROSERVICE_INSTANCE_ENVIRONMENT);
+  }
+
+  public static String readServiceInstanceEnvironment() {
+    return readServiceInstanceEnvironment(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceInstanceInitialStatus(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_INITIAL_STATUS,
+        OLD_CONFIG_SERVICE_INSTANCE_INITIAL_STATUS,
+        DEFAULT_MICROSERVICE_INSTANCE_INITIAL_STATUS);
+  }
+
+  public static String readServiceInstanceInitialStatus() {
+    return readServiceInstanceInitialStatus(BootStrapProperties.configuration);
+  }
+
+  public static String readServiceInstanceTags(Configuration configuration) {
+    return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_TAGS,
+        OLD_CONFIG_SERVICE_INSTANCE_TAGS,
+        null);
+  }
+
+  public static String readServiceInstanceTags() {
+    return readServiceInstanceTags(BootStrapProperties.configuration);
+  }
+
+  private static String readStringValue(Configuration configuration, String newKey, String oldKey,
+      String defaultValue) {
+    String result = configuration.getString(newKey, null);
+    if (result == null) {
+      return configuration.getString(oldKey, defaultValue);
+    }
+    return result;
+  }
+
+  private static Map<String, String> readProperties(Configuration configuration, String newKey, String oldKey) {
+    Map<String, String> propertiesMap = new HashMap<>();
+
+    String prefix = newKey;
+
+    Iterator<String> keysIterator = configuration.getKeys(prefix);
+
+    if (!keysIterator.hasNext()) {
+      prefix = oldKey;
+      keysIterator = configuration.getKeys(prefix);
+    }
+
+    while (keysIterator.hasNext()) {
+      String key = keysIterator.next();
+      propertiesMap.put(key.substring(prefix.length() + 1), String.valueOf(configuration.getProperty(key)));
+    }
+    return propertiesMap;
+  }
+
+
+  private static void checkMicroserviceName(String name) {
+    // the configuration we used
+    // when resolve placeholder failed
+    // the result will remains ${var}
+    if (StringUtils.isEmpty(name) || name.contains("${")) {
+      throw new IllegalArgumentException(String.format(
+          "MicroserviceName '%s' is invalid. you must configure '%s' or set the placeholder value.",
+          name,
+          CONFIG_SERVICE_NAME));
+    }
+  }
+}
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigUtil.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigUtil.java
index aed29c5..f3b5d51 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigUtil.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigUtil.java
@@ -128,11 +128,10 @@ public final class ConfigUtil {
       loader.getConfigModels().add(model);
     }
 
-    LOGGER.info("create local config:");
     boolean isPrintUrl = DynamicPropertyFactory.getInstance()
         .getBooleanProperty(IS_PRINT_URL, true).get();
     if (isPrintUrl) {
-      LOGGER.info(" {}.", StringUtils.join(loader.getConfigModels(), ","));
+      LOGGER.info("create local config from paths=[{}]", StringUtils.join(loader.getConfigModels(), ","));
     }
 
     ConcurrentCompositeConfiguration config = ConfigUtil.createLocalConfig(loader.getConfigModels());
@@ -140,7 +139,7 @@ public final class ConfigUtil {
     return config;
   }
 
-  public static ConcurrentCompositeConfiguration createLocalConfig(List<ConfigModel> configModelList) {
+  private static ConcurrentCompositeConfiguration createLocalConfig(List<ConfigModel> configModelList) {
     ConcurrentCompositeConfiguration config = new ConcurrentCompositeConfiguration();
 
     duplicateCseConfigToServicecomb(config,
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index 8ce351f..947ecce 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -23,8 +23,6 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.registry.api.Discovery;
 import org.apache.servicecomb.registry.api.registry.Microservice;
@@ -34,7 +32,6 @@ import org.apache.servicecomb.registry.cache.InstanceCacheManager;
 import org.apache.servicecomb.registry.cache.InstanceCacheManagerNew;
 import org.apache.servicecomb.registry.consumer.AppManager;
 import org.apache.servicecomb.registry.consumer.MicroserviceVersions;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 
 import com.google.common.annotations.VisibleForTesting;
 
@@ -47,7 +44,6 @@ public class DiscoveryManager {
 
   private final InstanceCacheManager instanceCacheManager;
 
-  private final MicroserviceDefinition microserviceDefinition;
 
   private DiscoveryManager() {
     appManager = new AppManager();
@@ -56,9 +52,6 @@ public class DiscoveryManager {
         .stream()
         .filter((discovery -> discovery.enabled()))
         .collect(Collectors.toList());
-
-    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
-    microserviceDefinition = new MicroserviceDefinition(loader.getConfigModels());
   }
 
   @VisibleForTesting
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
index d3f9f31..fe1c179 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
@@ -16,14 +16,6 @@
  */
 package org.apache.servicecomb.registry.api.registry;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_APPLICATION_ID_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_ROLE_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_MICROSERVICE_NAME;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_SERVICECOMB_ENV;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICECOMB_ENV;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.APP_MAPPING;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICE_MAPPING;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.VERSION_MAPPING;
@@ -33,26 +25,28 @@ import java.util.Map;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.EnvironmentConfiguration;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.registry.config.ConfigurePropertyUtils;
 import org.apache.servicecomb.registry.config.MicroservicePropertiesLoader;
 import org.apache.servicecomb.registry.definition.DefinitionConst;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.registry.version.Version;
 
+import com.google.common.annotations.VisibleForTesting;
+
 public class MicroserviceFactory {
-  public Microservice create(String appId, String microserviceName) {
-    MicroserviceDefinition microserviceDefinition = MicroserviceDefinition.create(appId, microserviceName);
-    return create(microserviceDefinition);
+  public Microservice create() {
+    return create(ConfigUtil.createLocalConfig());
   }
 
-  public Microservice create(MicroserviceDefinition microserviceDefinition) {
-    Configuration configuration = microserviceDefinition.getConfiguration();
-    Microservice microservice = createMicroserviceFromDefinition(configuration);
+  @VisibleForTesting
+  public Microservice create(Configuration configuration) {
+    Microservice microservice = createMicroserviceFromConfiguration(configuration);
     microservice.setInstance(MicroserviceInstance.createFromDefinition(configuration));
     return microservice;
   }
 
-  private Microservice createMicroserviceFromDefinition(Configuration configuration) {
+  private Microservice createMicroserviceFromConfiguration(Configuration configuration) {
     Microservice microservice = new Microservice();
 
     EnvironmentConfiguration envConfig = new EnvironmentConfiguration();
@@ -60,34 +54,31 @@ public class MicroserviceFactory {
         !StringUtils.isEmpty(envConfig.getString(envConfig.getString(APP_MAPPING)))) {
       microservice.setAppId(envConfig.getString(envConfig.getString(APP_MAPPING)));
     } else {
-      microservice.setAppId(configuration
-          .getString(CONFIG_APPLICATION_ID_KEY, DefinitionConst.DEFAULT_APPLICATION_ID));
+      microservice.setAppId(BootStrapProperties.readApplication(configuration));
     }
     if (!StringUtils.isEmpty(envConfig.getString(SERVICE_MAPPING)) &&
         !StringUtils.isEmpty(envConfig.getString(envConfig.getString(SERVICE_MAPPING)))) {
       microservice.setServiceName(envConfig.getString(envConfig.getString(SERVICE_MAPPING)));
     } else {
-      microservice.setServiceName(configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY,
-          DEFAULT_MICROSERVICE_NAME));
+      microservice.setServiceName(BootStrapProperties.readServiceName(configuration));
     }
     String version;
     if (!StringUtils.isEmpty(envConfig.getString(VERSION_MAPPING)) &&
         !StringUtils.isEmpty(envConfig.getString(envConfig.getString(VERSION_MAPPING)))) {
       version = envConfig.getString(envConfig.getString(VERSION_MAPPING));
     } else {
-      version = configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
-          DefinitionConst.DEFAULT_MICROSERVICE_VERSION);
+      version = BootStrapProperties.readServiceVersion(configuration);
     }
     // just check version format
     new Version(version);
     microservice.setVersion(version);
 
-    setDescription(configuration, microservice);
-    microservice.setLevel(configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_ROLE_KEY, "FRONT"));
+    microservice.setDescription(BootStrapProperties.readServiceDescription(configuration));
+    microservice.setLevel(BootStrapProperties.readServiceRole(configuration));
     microservice.setPaths(ConfigurePropertyUtils.getMicroservicePaths(configuration));
     Map<String, String> propertiesMap = MicroservicePropertiesLoader.INSTANCE.loadProperties(configuration);
     microservice.setProperties(propertiesMap);
-    microservice.setEnvironment(configuration.getString(SERVICECOMB_ENV, DEFAULT_SERVICECOMB_ENV));
+    microservice.setEnvironment(BootStrapProperties.readServiceEnvironment(configuration));
 
     // set alias name when allow cross app
     if (allowCrossApp(propertiesMap)) {
@@ -98,24 +89,6 @@ public class MicroserviceFactory {
     return microservice;
   }
 
-  /**
-   * {@code service_description.description} is split by {@code ,},
-   * need to combine the description array to raw description.
-   */
-  private void setDescription(Configuration configuration, Microservice microservice) {
-    String[] descriptionArray = configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY);
-    if (null == descriptionArray || descriptionArray.length < 1) {
-      return;
-    }
-
-    StringBuilder rawDescriptionBuilder = new StringBuilder();
-    for (String desc : descriptionArray) {
-      rawDescriptionBuilder.append(desc).append(",");
-    }
-
-    microservice.setDescription(rawDescriptionBuilder.substring(0, rawDescriptionBuilder.length() - 1));
-  }
-
   private boolean allowCrossApp(Map<String, String> propertiesMap) {
     return Boolean.parseBoolean(propertiesMap.get(DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY));
   }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
index 507042c..3622286 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstance.java
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.registry.config.InstancePropertiesLoader;
 import org.apache.servicecomb.registry.definition.DefinitionConst;
 
@@ -53,7 +54,7 @@ public class MicroserviceInstance {
   private HealthCheck healthCheck;
 
   /**
-   * Will be abandoned, use {@link Microservice#environment} instead
+   * Will be abandoned, use Microservice Environment instead
    */
   @Deprecated
   private String environment;
@@ -173,12 +174,9 @@ public class MicroserviceInstance {
     // default hard coded values
     microserviceInstance.setStage(DefinitionConst.DEFAULT_STAGE);
     microserviceInstance
-        .setEnvironment(
-            configuration.getString(
-                DefinitionConst.CONFIG_QUALIFIED_INSTANCE_ENVIRONMENT_KEY, DefinitionConst.DEFAULT_INSTANCE_ENVIRONMENT));
+        .setEnvironment(BootStrapProperties.readServiceInstanceEnvironment(configuration));
     microserviceInstance.setStatus(MicroserviceInstanceStatus
-        .valueOf(configuration.getString(
-            DefinitionConst.CONFIG_QUALIFIED_INSTANCE_INITIAL_STATUS, DefinitionConst.DEFAULT_INSTANCE_INITIAL_STATUS)));
+        .valueOf(BootStrapProperties.readServiceInstanceInitialStatus()));
     HealthCheck healthCheck = new HealthCheck();
     healthCheck.setMode(HealthCheckMode.HEARTBEAT);
     microserviceInstance.setHealthCheck(healthCheck);
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
index 61144a1..8df5f94 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/AbstractPropertiesLoader.java
@@ -21,25 +21,18 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.registry.api.PropertyExtended;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
 
 /**
- * 加载微服务和微服务实例的properties
+ * Loading microservice properties
  */
 public abstract class AbstractPropertiesLoader {
   private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPropertiesLoader.class);
 
-  protected static final String PROPERTIES = ".properties";
-
-  protected static final String EXTENDED_CLASS_FOR_COMPATIBLE = ".propertyExtentedClass";
-
-  protected static final String EXTENDED_CLASS = ".propertyExtendedClass";
-
-  protected abstract String getConfigOptionPrefix();
-
   public Map<String, String> loadProperties(Configuration configuration) {
     Map<String, String> propertiesMap = new HashMap<>();
     loadPropertiesFromConfigMap(configuration, propertiesMap);
@@ -48,23 +41,21 @@ public abstract class AbstractPropertiesLoader {
     return propertiesMap;
   }
 
-  protected void loadPropertiesFromConfigMap(Configuration configuration, Map<String, String> propertiesMap) {
-    String configKeyPrefix = mergeStrings(getConfigOptionPrefix(), PROPERTIES);
-    propertiesMap.putAll(ConfigurePropertyUtils.getPropertiesWithPrefix(configuration, configKeyPrefix));
+  abstract protected Map<String, String> readProperties(Configuration configuration);
+
+  abstract protected String readPropertiesExtendedClass(Configuration configuration);
+
+  private void loadPropertiesFromConfigMap(Configuration configuration, Map<String, String> propertiesMap) {
+    propertiesMap.putAll(readProperties(configuration));
   }
 
-  protected void loadPropertiesFromExtendedClass(Configuration configuration, Map<String, String> propertiesMap) {
-    String extendedPropertyClass = readExtendedPropertyClassName(configuration, EXTENDED_CLASS);
+  private void loadPropertiesFromExtendedClass(Configuration configuration, Map<String, String> propertiesMap) {
+    String extendedPropertyClass = readPropertiesExtendedClass(configuration);
+
     if (StringUtils.isEmpty(extendedPropertyClass)) {
-      extendedPropertyClass = readExtendedPropertyClassName(configuration, EXTENDED_CLASS_FOR_COMPATIBLE);
-      if (StringUtils.isEmpty(extendedPropertyClass)) {
-        return;
-      } else {
-        LOGGER.warn("The property `{}` is deprecated and will be removed soon, please use the new property `{}`.",
-            mergeStrings(getConfigOptionPrefix(), EXTENDED_CLASS_FOR_COMPATIBLE),
-            mergeStrings(getConfigOptionPrefix(), EXTENDED_CLASS));
-      }
+      return;
     }
+
     try {
       Class<?> classExternalProperty = Class.forName(extendedPropertyClass);
       if (!PropertyExtended.class.isAssignableFrom(classExternalProperty)) {
@@ -86,13 +77,4 @@ public abstract class AbstractPropertiesLoader {
       throw new Error(errMsg, e);
     }
   }
-
-  private String readExtendedPropertyClassName(Configuration configuration, String keyName) {
-    String configKey = mergeStrings(getConfigOptionPrefix(), keyName);
-    return configuration.getString(configKey, "");
-  }
-
-  protected static String mergeStrings(String... strArr) {
-    return String.join("", strArr);
-  }
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/ConfigurePropertyUtils.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/ConfigurePropertyUtils.java
index 49d8a3d..6c4c54a 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/ConfigurePropertyUtils.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/ConfigurePropertyUtils.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.foundation.common.utils.ClassLoaderScopeContext;
 import org.apache.servicecomb.registry.api.registry.BasePath;
 import org.apache.servicecomb.registry.definition.DefinitionConst;
@@ -62,7 +63,7 @@ public final class ConfigurePropertyUtils {
   @SuppressWarnings("unchecked")
   public static List<BasePath> getMicroservicePaths(Configuration configuration) {
     List<BasePath> basePaths = new ArrayList<>();
-    for (Object path : configuration.getList("service_description.paths")) {
+    for (Object path : BootStrapProperties.readServicePaths(configuration)) {
       BasePath basePath = new BasePath();
       Map<String, ?> pathMap = (Map<String, ?>) path;
       basePath.setPath(buildPath((String) pathMap.get("path")));
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
index cd950d6..99ac20c 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/InstancePropertiesLoader.java
@@ -17,6 +17,11 @@
 
 package org.apache.servicecomb.registry.config;
 
+import java.util.Map;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.BootStrapProperties;
+
 public final class InstancePropertiesLoader extends AbstractPropertiesLoader {
 
   public static final InstancePropertiesLoader INSTANCE = new InstancePropertiesLoader();
@@ -24,8 +29,14 @@ public final class InstancePropertiesLoader extends AbstractPropertiesLoader {
   private InstancePropertiesLoader() {
   }
 
+
+  @Override
+  protected Map<String, String> readProperties(Configuration configuration) {
+    return BootStrapProperties.readServiceInstanceProperties(configuration);
+  }
+
   @Override
-  protected String getConfigOptionPrefix() {
-    return "instance_description";
+  protected String readPropertiesExtendedClass(Configuration configuration) {
+    return BootStrapProperties.readServiceInstanceExtendedClass(configuration);
   }
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
index 62654e4..2ac8865 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/config/MicroservicePropertiesLoader.java
@@ -17,7 +17,10 @@
 
 package org.apache.servicecomb.registry.config;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_SERVICE_DESCRIPTION_KEY;
+import java.util.Map;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.BootStrapProperties;
 
 public final class MicroservicePropertiesLoader extends AbstractPropertiesLoader {
 
@@ -27,7 +30,12 @@ public final class MicroservicePropertiesLoader extends AbstractPropertiesLoader
   }
 
   @Override
-  protected String getConfigOptionPrefix() {
-    return CONFIG_SERVICE_DESCRIPTION_KEY;
+  protected Map<String, String> readProperties(Configuration configuration) {
+    return BootStrapProperties.readServiceProperties(configuration);
+  }
+
+  @Override
+  protected String readPropertiesExtendedClass(Configuration configuration) {
+    return BootStrapProperties.readServiceExtendedClass(configuration);
   }
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
index db5fcfb..5735927 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
@@ -17,26 +17,11 @@
 
 package org.apache.servicecomb.registry.definition;
 
-import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
-
 public interface DefinitionConst {
-
-  String CONFIG_QUALIFIED_INSTANCE_ENVIRONMENT_KEY = "instance_description.environment";
-
-  String CONFIG_QUALIFIED_INSTANCE_INITIAL_STATUS = "instance_description.initialStatus";
-
   String CONFIG_ALLOW_CROSS_APP_KEY = "allowCrossApp";
 
-  String DEFAULT_APPLICATION_ID = "default";
-
-  String DEFAULT_MICROSERVICE_VERSION = "1.0.0.0";
-
   String DEFAULT_STAGE = "prod";
 
-  String DEFAULT_INSTANCE_ENVIRONMENT = "production";
-
-  String DEFAULT_INSTANCE_INITIAL_STATUS = MicroserviceInstanceStatus.UP.name();
-
   String VERSION_RULE_LATEST = "latest";
 
   String VERSION_RULE_ALL = "0.0.0.0+";
@@ -45,13 +30,13 @@ public interface DefinitionConst {
 
   String URL_PREFIX = "urlPrefix";
 
-  public static final String INSTANCE_PUBKEY_PRO = "publickey";
+  String INSTANCE_PUBKEY_PRO = "publickey";
 
-  public static final String REGISTER_URL_PREFIX = "servicecomb.service.registry.registerUrlPrefix";
+  String REGISTER_URL_PREFIX = "servicecomb.service.registry.registerUrlPrefix";
 
-  public static final String REGISTER_SERVICE_PATH = "servicecomb.service.registry.registerPath";
+  String REGISTER_SERVICE_PATH = "servicecomb.service.registry.registerPath";
 
-  public static final String REGISTRY_APP_ID = "default";
+  String REGISTRY_APP_ID = "default";
 
-  public static final String REGISTRY_SERVICE_NAME = "SERVICECENTER";
+  String REGISTRY_SERVICE_NAME = "SERVICECENTER";
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/MicroserviceDefinition.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/MicroserviceDefinition.java
deleted file mode 100644
index 8b5d0cf..0000000
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/MicroserviceDefinition.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.registry.definition;
-
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_APPLICATION_ID_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_MICROSERVICE_NAME_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_SERVICE_DESCRIPTION_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_APPLICATION_ID;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_MICROSERVICE_NAME;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.ConfigModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-
-public class MicroserviceDefinition {
-  private static final Logger LOGGER = LoggerFactory.getLogger(MicroserviceDefinition.class);
-
-  // microservice maybe combined from many microservices
-  // if a and b combined to ab, then combinedFrom value is a,b
-  // if not combined, just only one microservice, then combinedFrom is empty
-  private Set<String> combinedFrom = new HashSet<>();
-
-  private List<ConfigModel> configModels;
-
-  private Configuration configuration;
-
-  private String microserviceName;
-
-  private String applicationId;
-
-  public String getMicroserviceName() {
-    return microserviceName;
-  }
-
-  public String getApplicationId() {
-    return applicationId;
-  }
-
-  public static MicroserviceDefinition create(String appId, String microserviceName) {
-    ConfigModel configModel = createConfigModel(appId, microserviceName);
-    return new MicroserviceDefinition(Arrays.asList(configModel));
-  }
-
-  public static ConfigModel createConfigModel(String appId, String microserviceName) {
-    Map<String, Object> descMap = new HashMap<>();
-    descMap.put(CONFIG_MICROSERVICE_NAME_KEY, microserviceName);
-
-    Map<String, Object> config = new HashMap<>();
-    config.put(CONFIG_APPLICATION_ID_KEY, appId);
-    config.put(CONFIG_SERVICE_DESCRIPTION_KEY, descMap);
-
-    ConfigModel configModel = new ConfigModel();
-    configModel.setConfig(config);
-    return configModel;
-  }
-
-  public MicroserviceDefinition(List<ConfigModel> configModels) {
-    if (configModels == null) {
-      configModels = Collections.emptyList();
-    }
-
-    this.configModels = configModels;
-    this.configuration = ConfigUtil.createLocalConfig(configModels);
-    this.microserviceName =
-        configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY, DEFAULT_MICROSERVICE_NAME);
-
-    this.applicationId = configuration.getString(CONFIG_APPLICATION_ID_KEY, DEFAULT_APPLICATION_ID);
-
-    // log paths first, even microserviceName is invalid, this can help user to find problems
-    logConfigPath();
-    checkMicroserviceName(microserviceName);
-
-    initCombinedFrom(configModels);
-  }
-
-  public Set<String> getCombinedFrom() {
-    return combinedFrom;
-  }
-
-  private void initCombinedFrom(List<ConfigModel> configModels) {
-    for (ConfigModel model : configModels) {
-      Configuration conf = ConfigUtil.createLocalConfig(Arrays.asList(model));
-      String name =
-          conf.getString(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY, DEFAULT_MICROSERVICE_NAME);
-      if (!StringUtils.isEmpty(name)) {
-        checkMicroserviceName(name);
-        combinedFrom.add(name);
-      }
-    }
-
-    combinedFrom.remove(microserviceName);
-  }
-
-  private void checkMicroserviceName(String name) {
-    // the configuration we used
-    // when resolve placeholder failed
-    // the result will remains ${var}
-    if (StringUtils.isEmpty(name) || name.contains("${")) {
-      throw new IllegalArgumentException(String.format(
-          "MicroserviceName '%s' is invalid. you must configure '%s' or set the placeholder value.",
-          name,
-          CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY));
-    }
-  }
-
-  // microserviceName maybe null
-  public void logConfigPath() {
-    List<String> pathList = new ArrayList<>();
-    for (ConfigModel configModel : configModels) {
-      if (configModel.getUrl() != null) {
-        pathList.add(configModel.getUrl().toString());
-      }
-    }
-    LOGGER.info("load microservice config, name={}, paths={}",
-        microserviceName,
-        pathList);
-  }
-
-  public List<ConfigModel> getConfigModels() {
-    return configModels;
-  }
-
-  public Configuration getConfiguration() {
-    return configuration;
-  }
-}
diff --git a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/config/TestAbstractPropertiesLoader.java b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/config/TestAbstractPropertiesLoader.java
index 156469d..be5a48c 100644
--- a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/config/TestAbstractPropertiesLoader.java
+++ b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/config/TestAbstractPropertiesLoader.java
@@ -17,9 +17,8 @@
 
 package org.apache.servicecomb.registry.config;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_SERVICE_DESCRIPTION_KEY;
-
 import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -27,14 +26,9 @@ import com.netflix.config.DynamicConfiguration;
 
 public class TestAbstractPropertiesLoader {
   @Test
-  public void testMergeStrings() {
-    Assert.assertEquals("abc123efg", AbstractPropertiesLoader.mergeStrings("abc", "123", "efg"));
-  }
-
-  @Test
   public void testExtendedClassCompatible() {
     Configuration configuration = new DynamicConfiguration();
-    configuration.setProperty(CONFIG_SERVICE_DESCRIPTION_KEY + AbstractPropertiesLoader.EXTENDED_CLASS, "invalidClass");
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_EXTENDED_CLASS, "invalidClass");
 
     AbstractPropertiesLoader loader = MicroservicePropertiesLoader.INSTANCE;
     try {
diff --git a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
index 9845b3f..9f0c1a8 100644
--- a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
+++ b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/TracingConfiguration.java
@@ -17,17 +17,16 @@
 
 package org.apache.servicecomb.tracing.zipkin;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_TRACING_COLLECTOR_ADDRESS;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_TRACING_COLLECTOR_API_V1;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_TRACING_COLLECTOR_API_V2;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_TRACING_COLLECTOR_API_VERSION;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_TRACING_COLLECTOR_PATH;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_MICROSERVICE_NAME;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_TRACING_COLLECTOR_ADDRESS;
 
 import java.text.MessageFormat;
 
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.DynamicProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -81,8 +80,7 @@ class TracingConfiguration {
   Tracing tracing(Reporter<Span> reporter, DynamicProperties dynamicProperties,
       CurrentTraceContext currentTraceContext) {
     return Tracing.newBuilder()
-        .localServiceName(dynamicProperties.getStringProperty(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY,
-            DEFAULT_MICROSERVICE_NAME))
+        .localServiceName(BootStrapProperties.readServiceName())
         .currentTraceContext(currentTraceContext) // puts trace IDs into logs
         .spanReporter(reporter)
         .build();
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
index 93e8ccb..76f1b5f 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
@@ -16,11 +16,10 @@
  */
 package org.apache.servicecomb.it.schema;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY;
-
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.provider.pojo.Invoker;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
@@ -28,8 +27,6 @@ import org.apache.servicecomb.swagger.invocation.context.InvocationContext;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import com.netflix.config.DynamicPropertyFactory;
-
 @RestSchema(schemaId = "trace")
 @RequestMapping(path = "/v1/trace")
 public class TraceSchema {
@@ -38,7 +35,7 @@ public class TraceSchema {
   }
 
   TraceSchemaIntf intf = Invoker.createProxy(
-      DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY, null).get(),
+      BootStrapProperties.readServiceName(),
       "trace",
       TraceSchemaIntf.class);
 
diff --git a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
index 3b4d5f9..f21bcad 100644
--- a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
+++ b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/LocalRegistryStore.java
@@ -30,8 +30,6 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.foundation.common.utils.JvmUtils;
 import org.apache.servicecomb.localregistry.RegistryBean.Instance;
@@ -40,7 +38,6 @@ import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.swagger.SwaggerUtils;
 import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
 import org.yaml.snakeyaml.Yaml;
@@ -74,10 +71,8 @@ public class LocalRegistryStore {
   }
 
   public void init() {
-    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(loader.getConfigModels());
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    selfMicroservice = microserviceFactory.create(microserviceDefinition);
+    selfMicroservice = microserviceFactory.create();
     selfMicroserviceInstance = selfMicroservice.getInstance();
     microserviceMap.clear();
     microserviceInstanceMap.clear();
diff --git a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/RegistryBean.java b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/RegistryBean.java
index 320d5aa..8e3ca43 100644
--- a/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/RegistryBean.java
+++ b/service-registry/registry-local/src/main/java/org/apache/servicecomb/localregistry/RegistryBean.java
@@ -17,8 +17,6 @@
 
 package org.apache.servicecomb.localregistry;
 
-import static org.apache.servicecomb.registry.definition.DefinitionConst.DEFAULT_APPLICATION_ID;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -27,9 +25,8 @@ import java.util.Map;
 import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.foundation.common.base.ServiceCombConstants;
-
-import com.netflix.config.DynamicPropertyFactory;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 
 /**
  * Configuration bean for local services. Bean configuration is token
@@ -117,12 +114,7 @@ public class RegistryBean {
     if (!StringUtils.isEmpty(configAppId)) {
       return configAppId;
     }
-    if (DynamicPropertyFactory.getInstance()
-        .getStringProperty(ServiceCombConstants.CONFIG_APPLICATION_ID_KEY, null).get() != null) {
-      return DynamicPropertyFactory.getInstance()
-          .getStringProperty(ServiceCombConstants.CONFIG_APPLICATION_ID_KEY, null).get();
-    }
-    return DEFAULT_APPLICATION_ID;
+    return BootStrapProperties.readApplication();
   }
 
   public String getId() {
diff --git a/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java b/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
index 29ca7d5..95403b2 100644
--- a/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
+++ b/service-registry/registry-schema-discovery/src/main/java/org/apache/servicecomb/schemadiscovery/SchemaDiscovery.java
@@ -21,8 +21,8 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.core.invocation.endpoint.EndpointUtils;
-import org.apache.servicecomb.foundation.common.base.ServiceCombConstants;
 import org.apache.servicecomb.provider.pojo.Invoker;
 import org.apache.servicecomb.registry.api.Discovery;
 import org.apache.servicecomb.registry.api.registry.Microservice;
@@ -88,9 +88,7 @@ public class SchemaDiscovery implements Discovery {
     if (this.schemaDiscoveryService == null) {
       // For schema discovery, assume all instances of different microservices
       // are instances of this microservice.
-      String serviceName = DynamicPropertyFactory.getInstance()
-          .getStringProperty(ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY,
-              ServiceCombConstants.DEFAULT_MICROSERVICE_NAME).get();
+      String serviceName = BootStrapProperties.readServiceName();
 
       schemaDiscoveryService = Invoker
           .createProxy(serviceName, SchemaDiscoveryService.SCHEMA_ID,
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
index b133e67..b581de8 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
@@ -27,8 +27,8 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.foundation.common.Holder;
 import org.apache.servicecomb.foundation.common.event.EventManager;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
@@ -38,7 +38,6 @@ import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
 import org.apache.servicecomb.serviceregistry.registry.ServiceRegistryFactory;
@@ -75,9 +74,7 @@ public final class RegistryUtils {
       return;
     }
 
-    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(loader.getConfigModels());
-    initializeServiceRegistriesWithConfig(microserviceDefinition);
+    initializeServiceRegistriesWithConfig(ConfigUtil.createLocalConfig());
 
     initAggregateServiceRegistryCache();
   }
@@ -95,16 +92,16 @@ public final class RegistryUtils {
             .register(aggregateServiceRegistryCache));
   }
 
-  private static void initializeServiceRegistriesWithConfig(MicroserviceDefinition microserviceDefinition) {
+  private static void initializeServiceRegistriesWithConfig(Configuration configuration) {
     serviceRegistry =
-        ServiceRegistryFactory.create(ServiceRegistryConfig.INSTANCE, microserviceDefinition);
-    initializeServiceRegistries(microserviceDefinition);
+        ServiceRegistryFactory.create(ServiceRegistryConfig.INSTANCE, configuration);
+    initializeServiceRegistries(configuration);
   }
 
-  private static void initializeServiceRegistries(MicroserviceDefinition microserviceDefinition) {
+  private static void initializeServiceRegistries(Configuration configuration) {
     Map<String, ServiceRegistryConfig> configs = BeanUtils.getBeansOfType(ServiceRegistryConfig.class);
     configs.forEach((k, v) -> {
-      ServiceRegistry serviceRegistry = ServiceRegistryFactory.create(v, microserviceDefinition);
+      ServiceRegistry serviceRegistry = ServiceRegistryFactory.create(v, configuration);
       addExtraServiceRegistry(serviceRegistry);
     });
     executeOnEachServiceRegistry(ServiceRegistry::init);
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceRegistry.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceRegistry.java
index dc00b4d..643cacd 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceRegistry.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceRegistry.java
@@ -49,8 +49,6 @@ public interface ServiceRegistry {
 
   EventBus getEventBus();
 
-  Set<String> getCombinedMicroserviceNames();
-
   /**
    * Get the AppId of this microservice instance itself.
    */
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
index a659d2c..1d34004 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
@@ -22,9 +22,9 @@ import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.foundation.common.concurrency.SuppressedRunnableWrapper;
 import org.apache.servicecomb.registry.DiscoveryManager;
 import org.apache.servicecomb.registry.api.event.MicroserviceInstanceChangedEvent;
@@ -38,7 +38,6 @@ import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.api.Const;
@@ -65,8 +64,6 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
 
   protected EventBus eventBus;
 
-  protected MicroserviceDefinition microserviceDefinition;
-
   protected Microservice microservice;
 
   protected ServiceRegistryClient srClient;
@@ -82,12 +79,11 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
   RefreshableServiceRegistryCache serviceRegistryCache;
 
   public AbstractServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
+      Configuration configuration) {
     setName(serviceRegistryConfig.getRegistryName());
     this.eventBus = eventBus;
     this.serviceRegistryConfig = serviceRegistryConfig;
-    this.microserviceDefinition = microserviceDefinition;
-    this.microservice = microserviceFactory.create(microserviceDefinition);
+    this.microservice = microserviceFactory.create(configuration);
   }
 
   @Override
@@ -116,11 +112,6 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry {
   }
 
   @Override
-  public Set<String> getCombinedMicroserviceNames() {
-    return microserviceDefinition.getCombinedFrom();
-  }
-
-  @Override
   public ServiceRegistryClient getServiceRegistryClient() {
     return srClient;
   }
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java
index e0d3172..940ecd6 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java
@@ -21,11 +21,11 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.foundation.common.concurrency.SuppressedRunnableWrapper;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,8 +40,8 @@ public class RemoteServiceRegistry extends AbstractServiceRegistry {
       .getOrLoadSortedService(ServiceRegistryTaskInitializer.class);
 
   public RemoteServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
-    super(eventBus, serviceRegistryConfig, microserviceDefinition);
+      Configuration configuration) {
+    super(eventBus, serviceRegistryConfig, configuration);
   }
 
   @Override
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/ServiceRegistryFactory.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/ServiceRegistryFactory.java
index 42b2653..495b2d9 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/ServiceRegistryFactory.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/ServiceRegistryFactory.java
@@ -17,10 +17,10 @@
 
 package org.apache.servicecomb.serviceregistry.registry;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.foundation.common.event.SimpleEventBus;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 
 import com.google.common.eventbus.EventBus;
 
@@ -29,15 +29,15 @@ public final class ServiceRegistryFactory {
   }
 
   public static ServiceRegistry create(ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
-    return create(null, serviceRegistryConfig, microserviceDefinition);
+      Configuration configuration) {
+    return create(null, serviceRegistryConfig, configuration);
   }
 
   public static ServiceRegistry create(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
+      Configuration configuration) {
     if (null == eventBus) {
       eventBus = new SimpleEventBus();
     }
-    return new RemoteServiceRegistry(eventBus, serviceRegistryConfig, microserviceDefinition);
+    return new RemoteServiceRegistry(eventBus, serviceRegistryConfig, configuration);
   }
 }
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
index 1509f89..c2b3374 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
@@ -26,14 +26,15 @@ import java.util.Set;
 import javax.ws.rs.core.Response.Status;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.foundation.common.base.ServiceCombConstants;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
+import org.apache.servicecomb.serviceregistry.adapter.EnvAdapterManager;
 import org.apache.servicecomb.serviceregistry.api.response.GetSchemaResponse;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.client.http.Holder;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.serviceregistry.adapter.EnvAdapterManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -226,7 +227,7 @@ public class MicroserviceRegisterTask extends AbstractRegisterTask {
         "There is a schema only existing in local microservice: [" + localSchemaEntry.getKey()
             + "], which means there are interfaces changed. "
             + "You need to increment microservice version before deploying, "
-            + "or you can configure service_description.environment="
+            + "or you can configure " + BootStrapProperties.CONFIG_SERVICE_ENVIRONMENT + "="
             + ServiceCombConstants.DEVELOPMENT_SERVICECOMB_ENV
             + " to work in development environment and ignore this error");
   }
@@ -279,7 +280,7 @@ public class MicroserviceRegisterTask extends AbstractRegisterTask {
           "The schema(id=[" + localSchemaEntry.getKey()
               + "]) content held by this instance and the service center is different. "
               + "You need to increment microservice version before deploying. "
-              + "Or you can configure service_description.environment="
+              + "Or you can configure " + BootStrapProperties.CONFIG_SERVICE_ENVIRONMENT + "="
               + ServiceCombConstants.DEVELOPMENT_SERVICECOMB_ENV
               + " to work in development environment and ignore this error");
     }
@@ -320,7 +321,7 @@ public class MicroserviceRegisterTask extends AbstractRegisterTask {
         throw new IllegalStateException("There are schemas only existing in service center: " + scSchemaMap.keySet()
             + ", which means there are interfaces changed. "
             + "You need to increment microservice version before deploying, "
-            + "or if service_description.environment="
+            + "or if " + BootStrapProperties.CONFIG_SERVICE_ENVIRONMENT + "="
             + ServiceCombConstants.DEVELOPMENT_SERVICECOMB_ENV
             + ", you can delete microservice information in service center and restart this instance.");
       }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
index 1e2c809..c3de510 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
@@ -17,28 +17,22 @@
 
 package org.apache.servicecomb.serviceregistry.api.registry;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY;
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY;
 import static org.apache.servicecomb.registry.definition.DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY;
-import static org.apache.servicecomb.registry.definition.DefinitionConst.DEFAULT_MICROSERVICE_VERSION;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
 
 import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mocked;
 
 public class TestMicroserviceFactory {
   @Rule
@@ -62,12 +56,8 @@ public class TestMicroserviceFactory {
 
   @Test
   public void testInit() {
-    MicroserviceConfigLoader loader = new MicroserviceConfigLoader();
-    loader.loadAndSort();
-
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(loader.getConfigModels());
     MicroserviceFactory factory = new MicroserviceFactory();
-    Microservice microservice = factory.create(microserviceDefinition);
+    Microservice microservice = factory.create(ConfigUtil.createLocalConfig());
 
     String microserviceName = "default";
 
@@ -76,83 +66,60 @@ public class TestMicroserviceFactory {
 
   @Test
   public void testSetDescription() {
-    Microservice microservice = new Microservice();
     MicroserviceFactory factory = new MicroserviceFactory();
-    Configuration configuration = Mockito.mock(Configuration.class);
-
-    Mockito.when(configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY))
-        .thenReturn(new String[] {"test1", "test2"});
-
-    Deencapsulation.invoke(factory, "setDescription", configuration, microservice);
-
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION, new String[] {"test1", "test2"});
+    Microservice microservice = factory.create(configuration);
     Assert.assertEquals("test1,test2", microservice.getDescription());
   }
 
   @Test
   public void testSetDescriptionOnNullDescription() {
-    Microservice microservice = new Microservice();
-    MicroserviceFactory factory = new MicroserviceFactory();
-    Configuration configuration = Mockito.mock(Configuration.class);
-
-    Mockito.when(configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY))
-        .thenReturn(null);
-
-    Deencapsulation.invoke(factory, "setDescription", configuration, microservice);
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.clearProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION);
 
+    MicroserviceFactory factory = new MicroserviceFactory();
+    Microservice microservice = factory.create(configuration);
     Assert.assertNull(microservice.getDescription());
 
-    Mockito.when(configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY))
-        .thenReturn(new String[] {});
-
-    Deencapsulation.invoke(factory, "setDescription", configuration, microservice);
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION, new String[] {});
+    microservice = factory.create(configuration);
 
     Assert.assertNull(microservice.getDescription());
   }
 
   @Test
   public void testSetDescriptionOnEmptyDescription() {
-    Microservice microservice = new Microservice();
-    MicroserviceFactory factory = new MicroserviceFactory();
-    Configuration configuration = Mockito.mock(Configuration.class);
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION, new String[] {"", ""});
 
-    Mockito.when(configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY))
-        .thenReturn(new String[] {"", ""});
+    MicroserviceFactory factory = new MicroserviceFactory();
 
-    Deencapsulation.invoke(factory, "setDescription", configuration, microservice);
+    Microservice microservice = factory.create(configuration);
 
     Assert.assertEquals(",", microservice.getDescription());
   }
 
   @Test
   public void testSetDescriptionOnBlankDescription() {
-    Microservice microservice = new Microservice();
-    MicroserviceFactory factory = new MicroserviceFactory();
-    Configuration configuration = Mockito.mock(Configuration.class);
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_DESCRIPTION, new String[] {" ", " "});
 
-    Mockito.when(configuration.getStringArray(CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY))
-        .thenReturn(new String[] {" ", " "});
+    MicroserviceFactory factory = new MicroserviceFactory();
 
-    Deencapsulation.invoke(factory, "setDescription", configuration, microservice);
+    Microservice microservice = factory.create(configuration);
 
     Assert.assertEquals(" , ", microservice.getDescription());
   }
 
   @Test
-  public void testCreateMicroserviceFromDefinitionWithInvalidVersion(@Mocked Configuration configuration,
-      @Mocked MicroserviceDefinition microserviceDefinition) {
-
-    new Expectations() {
-      {
-        configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
-            DEFAULT_MICROSERVICE_VERSION);
-        result = "x.y.x.1";
-        microserviceDefinition.getConfiguration();
-        result = configuration;
-      }
-    };
+  public void testCreateMicroserviceFromDefinitionWithInvalidVersion() {
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_VERSION, "x.y.x.1");
+
     expectedException.equals(IllegalStateException.class);
     expectedException.expectMessage("Invalid major \"x\", version \"x.y.x.1\".");
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    microserviceFactory.create(microserviceDefinition);
+    microserviceFactory.create(configuration);
   }
 }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
index 09bb1a5..a63e9b2 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java
@@ -17,8 +17,6 @@
 
 package org.apache.servicecomb.serviceregistry.client;
 
-import static org.apache.servicecomb.registry.definition.DefinitionConst.DEFAULT_APPLICATION_ID;
-
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
@@ -31,22 +29,23 @@ import java.util.concurrent.atomic.AtomicInteger;
 import javax.ws.rs.core.Response.Status;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.foundation.vertx.AsyncResultCallback;
+import org.apache.servicecomb.registry.api.event.MicroserviceInstanceChangedEvent;
+import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
-import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
-import org.apache.servicecomb.serviceregistry.api.response.GetSchemaResponse;
-import org.apache.servicecomb.serviceregistry.api.response.HeartbeatResponse;
-import org.apache.servicecomb.registry.api.event.MicroserviceInstanceChangedEvent;
-import org.apache.servicecomb.serviceregistry.client.http.Holder;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
 import org.apache.servicecomb.registry.version.Version;
 import org.apache.servicecomb.registry.version.VersionRule;
 import org.apache.servicecomb.registry.version.VersionRuleUtils;
 import org.apache.servicecomb.registry.version.VersionUtils;
+import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig;
+import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
+import org.apache.servicecomb.serviceregistry.api.response.GetSchemaResponse;
+import org.apache.servicecomb.serviceregistry.api.response.HeartbeatResponse;
+import org.apache.servicecomb.serviceregistry.client.http.Holder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
@@ -118,7 +117,7 @@ public class LocalServiceRegistryClientImpl implements ServiceRegistryClient {
         List<String> schemas = (List<String>) serviceConfig.get("schemaIds");
 
         Microservice microservice = new Microservice();
-        microservice.setAppId(appId == null ? DEFAULT_APPLICATION_ID : appId);
+        microservice.setAppId(appId == null ? BootStrapProperties.DEFAULT_APPLICATION : appId);
         microservice.setServiceName(name);
         microservice.setVersion(version);
         microservice.setServiceId(serviceId == null ? UUID.randomUUID().toString() : serviceId);
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestClientHttp.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestClientHttp.java
index d17c38a..3715572 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestClientHttp.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestClientHttp.java
@@ -19,11 +19,14 @@ package org.apache.servicecomb.serviceregistry.client.http;
 
 import java.util.concurrent.CountDownLatch;
 
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.foundation.vertx.AsyncResultCallback;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.client.Endpoints;
 import org.apache.servicecomb.serviceregistry.client.IpPortManager;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
@@ -34,6 +37,7 @@ import org.mockito.Mockito;
 import io.vertx.core.Handler;
 import io.vertx.core.buffer.Buffer;
 import mockit.Expectations;
+import mockit.Injectable;
 import mockit.Mock;
 import mockit.MockUp;
 import mockit.Mocked;
@@ -44,6 +48,9 @@ public class TestClientHttp {
   @SuppressWarnings("unchecked")
   @Test
   public void testServiceRegistryClientImpl(@Mocked IpPortManager manager) {
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_APPLICATION, "app");
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "ms");
     IpPort ipPort = new IpPort("127.0.0.1", 8853);
     new Expectations() {
       {
@@ -87,7 +94,7 @@ public class TestClientHttp {
     };
 
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    Microservice microservice = microserviceFactory.create("app", "ms");
+    Microservice microservice = microserviceFactory.create(configuration);
 
     ServiceRegistryClientImpl oClient = new ServiceRegistryClientImpl(ServiceRegistryConfig.INSTANCE);
     oClient.init();
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java
index 76d96bf..fffee24 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java
@@ -29,15 +29,19 @@ import java.util.concurrent.TimeUnit;
 
 import javax.ws.rs.core.Response.Status;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.log4j.Appender;
 import org.apache.log4j.Logger;
 import org.apache.log4j.spi.LoggingEvent;
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.foundation.common.net.IpPort;
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.foundation.vertx.client.http.HttpClients;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
+import org.apache.servicecomb.registry.definition.DefinitionConst;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig;
 import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.api.response.GetExistenceResponse;
@@ -47,7 +51,6 @@ import org.apache.servicecomb.serviceregistry.api.response.GetServiceResponse;
 import org.apache.servicecomb.serviceregistry.client.ClientException;
 import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl.ResponseWrapper;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.DefinitionConst;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -102,8 +105,10 @@ public class TestServiceRegistryClientImpl {
 
   @Test
   public void testPrivateMethodCreateHttpClientOptions() {
+    ArchaiusUtils.setProperty(BootStrapProperties.CONFIG_SERVICE_APPLICATION, "app");
+    ArchaiusUtils.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "ms");
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    Microservice microservice = microserviceFactory.create("app", "ms");
+    Microservice microservice = microserviceFactory.create();
     oClient.registerMicroservice(microservice);
     oClient.registerMicroserviceInstance(microservice.getInstance());
     try {
@@ -114,12 +119,15 @@ public class TestServiceRegistryClientImpl {
     } catch (Exception e) {
       Assert.assertNotNull(e);
     }
+    ArchaiusUtils.resetConfig();
   }
 
   @Test
   public void testException() {
+    ArchaiusUtils.setProperty(BootStrapProperties.CONFIG_SERVICE_APPLICATION, "app");
+    ArchaiusUtils.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "ms");
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    Microservice microservice = microserviceFactory.create("app", "ms");
+    Microservice microservice = microserviceFactory.create();
     Assert.assertNull(oClient.registerMicroservice(microservice));
     Assert.assertNull(oClient.registerMicroserviceInstance(microservice.getInstance()));
     oClient.init();
@@ -137,6 +145,8 @@ public class TestServiceRegistryClientImpl {
     Assert.assertNull(oClient.findServiceInstances("selfMicroserviceId", "appId", "serviceName", "versionRule", "0"));
 
     Assert.assertEquals("a", new ClientException("a").getMessage());
+
+    ArchaiusUtils.resetConfig();
   }
 
   static abstract class RegisterSchemaTester {
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/config/TestPropertiesLoader.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/config/TestPropertiesLoader.java
index aa1ca59..32d50b2 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/config/TestPropertiesLoader.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/config/TestPropertiesLoader.java
@@ -17,45 +17,41 @@
 
 package org.apache.servicecomb.serviceregistry.config;
 
-import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_SERVICE_DESCRIPTION_KEY;
-
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.configuration.Configuration;
-import org.apache.servicecomb.config.archaius.sources.ConfigModel;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
-import org.apache.servicecomb.registry.config.AbstractPropertiesLoader;
-import org.apache.servicecomb.registry.config.MicroservicePropertiesLoader;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.serviceregistry.registry.LocalServiceRegistryFactory;
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.netflix.config.DynamicConfiguration;
-
 public class TestPropertiesLoader {
   private static MicroserviceFactory microserviceFactory = new MicroserviceFactory();
 
   @Test
   public void testEmptyExtendedClass() {
-    Microservice microservice = microserviceFactory.create("default", "emptyExtendedClass");
-    Assert.assertEquals(0, microservice.getProperties().size());
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "emptyExtendedClass");
+    configuration.clearProperty(BootStrapProperties.CONFIG_SERVICE_PROPERTIES);
+    configuration.clearProperty(BootStrapProperties.OLD_CONFIG_SERVICE_PROPERTIES);
+    Microservice microservice = microserviceFactory.create(configuration);
+    // microservice.yaml has 3 properties
+    Assert.assertEquals(3, microservice.getProperties().size());
   }
 
   @Test
   public void testInvalidExtendedClass() {
-    ConfigModel configModel = MicroserviceDefinition.createConfigModel("default", "invalidExtendedClass");
-    @SuppressWarnings("unchecked")
-    Map<String, Object> desc =
-        (Map<String, Object>) configModel.getConfig().get(CONFIG_SERVICE_DESCRIPTION_KEY);
-    desc.put("propertyExtentedClass", "invalidClass");
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(Arrays.asList(configModel));
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "invalidExtendedClass");
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_EXTENDED_CLASS, "invalidClass");
+
     try {
-      microserviceFactory.create(microserviceDefinition);
+      microserviceFactory.create(configuration);
       Assert.fail("Must throw exception");
     } catch (Error e) {
       Assert.assertEquals(ClassNotFoundException.class, e.getCause().getClass());
@@ -65,14 +61,12 @@ public class TestPropertiesLoader {
 
   @Test
   public void testCanNotAssignExtendedClass() {
-    ConfigModel configModel = MicroserviceDefinition.createConfigModel("default", "invalidExtendedClass");
-    @SuppressWarnings("unchecked")
-    Map<String, Object> desc =
-        (Map<String, Object>) configModel.getConfig().get(CONFIG_SERVICE_DESCRIPTION_KEY);
-    desc.put("propertyExtentedClass", "java.lang.String");
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(Arrays.asList(configModel));
+    Configuration configuration = ConfigUtil.createLocalConfig();
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_NAME, "invalidExtendedClass");
+    configuration.setProperty(BootStrapProperties.CONFIG_SERVICE_EXTENDED_CLASS, "java.lang.String");
+
     try {
-      microserviceFactory.create(microserviceDefinition);
+      microserviceFactory.create(configuration);
       Assert.fail("Must throw exception");
     } catch (Error e) {
       Assert.assertEquals(
@@ -100,5 +94,4 @@ public class TestPropertiesLoader {
     expectedMap.put("ek0", "ev0");
     Assert.assertEquals(expectedMap, instance.getProperties());
   }
-
 }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/EmptyMockServiceRegistry.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/EmptyMockServiceRegistry.java
index 3679bc4..ef3a089 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/EmptyMockServiceRegistry.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/EmptyMockServiceRegistry.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.serviceregistry.registry;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -58,11 +57,6 @@ public class EmptyMockServiceRegistry implements ServiceRegistry {
   }
 
   @Override
-  public Set<String> getCombinedMicroserviceNames() {
-    return null;
-  }
-
-  @Override
   public String getAppId() {
     return null;
   }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistry.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistry.java
index d40e238..48077ff 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistry.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistry.java
@@ -16,10 +16,10 @@
  */
 package org.apache.servicecomb.serviceregistry.registry;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 
 import com.google.common.eventbus.EventBus;
 
@@ -27,8 +27,8 @@ public class LocalServiceRegistry extends AbstractServiceRegistry {
   private String localFile;
 
   public LocalServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
-    super(eventBus, serviceRegistryConfig, microserviceDefinition);
+      Configuration configuration) {
+    super(eventBus, serviceRegistryConfig, configuration);
   }
 
   public LocalServiceRegistry localFile(String localFile) {
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistryFactory.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistryFactory.java
index 4db0d18..816c687 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistryFactory.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/LocalServiceRegistryFactory.java
@@ -17,11 +17,11 @@
 
 package org.apache.servicecomb.serviceregistry.registry;
 
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.event.SimpleEventBus;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 
 import com.google.common.eventbus.EventBus;
 
@@ -35,18 +35,15 @@ public class LocalServiceRegistryFactory {
   public static ServiceRegistry createLocal(String localFile) {
     EventBus eventBus = new SimpleEventBus();
     ServiceRegistryConfig serviceRegistryConfig = ServiceRegistryConfig.INSTANCE;
-    MicroserviceConfigLoader loader = new MicroserviceConfigLoader();
-    loader.loadAndSort();
-
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(loader.getConfigModels());
-    return new LocalServiceRegistry(eventBus, serviceRegistryConfig, microserviceDefinition).localFile(localFile);
+    return new LocalServiceRegistry(eventBus, serviceRegistryConfig, ConfigUtil.createLocalConfig())
+        .localFile(localFile);
   }
 
   public static ServiceRegistry createLocal(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-      MicroserviceDefinition microserviceDefinition) {
+      Configuration configuration) {
     if (null == eventBus) {
       eventBus = new SimpleEventBus();
     }
-    return new LocalServiceRegistry(eventBus, serviceRegistryConfig, microserviceDefinition).localFile(REGISTRY_FILE);
+    return new LocalServiceRegistry(eventBus, serviceRegistryConfig, configuration).localFile(REGISTRY_FILE);
   }
 }
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
index fc3a85d..58859c1 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
@@ -21,16 +21,16 @@ import java.util.Arrays;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
+import org.apache.servicecomb.registry.api.event.task.ShutdownEvent;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
-import org.apache.servicecomb.registry.api.event.task.ShutdownEvent;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -46,8 +46,8 @@ import mockit.MockUp;
 public class TestRemoteServiceRegistry {
   class TestingRemoteServiceRegistry extends RemoteServiceRegistry {
     public TestingRemoteServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig,
-        MicroserviceDefinition microserviceDefinition) {
-      super(eventBus, serviceRegistryConfig, microserviceDefinition);
+        Configuration configuration) {
+      super(eventBus, serviceRegistryConfig, configuration);
     }
 
     @Override
@@ -60,7 +60,7 @@ public class TestRemoteServiceRegistry {
   public ExpectedException expectedException = ExpectedException.none();
 
   @Test
-  public void testLifeCycle(@Injectable ServiceRegistryConfig config, @Injectable MicroserviceDefinition definition,
+  public void testLifeCycle(@Injectable ServiceRegistryConfig config,
       @Injectable ServiceRegistry registry) throws InterruptedException {
     ArrayList<IpPort> ipPortList = new ArrayList<>();
     ipPortList.add(new IpPort("127.0.0.1", 9980));
@@ -76,8 +76,6 @@ public class TestRemoteServiceRegistry {
 
     new Expectations(SPIServiceUtils.class) {
       {
-        definition.getConfiguration();
-        result = ConfigUtil.createLocalConfig();
         config.getHeartbeatInterval();
         result = 30;
         config.getInstancePullInterval();
@@ -92,7 +90,7 @@ public class TestRemoteServiceRegistry {
     ServiceRegistry oldRegistry = RegistryUtils.getServiceRegistry();
     RegistryUtils.setServiceRegistry(registry);
     EventBus bus = new EventBus();
-    RemoteServiceRegistry remote = new TestingRemoteServiceRegistry(bus, config, definition);
+    RemoteServiceRegistry remote = new TestingRemoteServiceRegistry(bus, config, ConfigUtil.createLocalConfig());
     remote.init();
     remote.run();
 
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
index b06686a..5511613 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestServiceRegistryFactory.java
@@ -17,16 +17,17 @@
 
 package org.apache.servicecomb.serviceregistry.registry;
 
-import java.util.Collections;
-
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.config.BootStrapProperties;
+import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
 import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.junit.Assert;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import com.google.common.eventbus.EventBus;
 
@@ -38,27 +39,25 @@ public class TestServiceRegistryFactory {
   // even there is no any reference to registryClient, DO NOT delete it.
   // because what changed is class ServiceRegistryClientImpl
   public void testGetRemoteRegistryClient(@Mocked ServiceRegistryClientImpl registryClient) {
+    Configuration configuration = ConfigUtil.createLocalConfig();
     EventBus eventBus = new EventBus();
     ServiceRegistryConfig serviceRegistryConfig = ServiceRegistryConfig.INSTANCE;
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(Collections.emptyList());
 
     ServiceRegistry serviceRegistry =
-        ServiceRegistryFactory.create(eventBus, serviceRegistryConfig, microserviceDefinition);
+        ServiceRegistryFactory.create(eventBus, serviceRegistryConfig, configuration);
     serviceRegistry.init();
     ServiceRegistryClient client = serviceRegistry.getServiceRegistryClient();
     Assert.assertTrue(client instanceof ServiceRegistryClientImpl);
 
     serviceRegistry = ServiceRegistryFactory.create(eventBus,
-        serviceRegistryConfig,
-        microserviceDefinition);
+        serviceRegistryConfig, configuration);
     Assert.assertTrue(serviceRegistry instanceof RemoteServiceRegistry);
 
-    serviceRegistry = LocalServiceRegistryFactory.createLocal(eventBus, serviceRegistryConfig, microserviceDefinition);
+    serviceRegistry = LocalServiceRegistryFactory.createLocal(eventBus, serviceRegistryConfig, configuration);
     serviceRegistry.init();
     client = serviceRegistry.getServiceRegistryClient();
     Assert.assertTrue(client instanceof LocalServiceRegistryClientImpl);
     Assert.assertTrue(LocalServiceRegistryFactory.createLocal(eventBus,
-        serviceRegistryConfig,
-        microserviceDefinition) instanceof LocalServiceRegistry);
+        serviceRegistryConfig, configuration) instanceof LocalServiceRegistry);
   }
 }
diff --git a/service-registry/registry-service-center/src/test/resources/microservice.yaml b/service-registry/registry-service-center/src/test/resources/microservice.yaml
index 4788355..3f21d12 100644
--- a/service-registry/registry-service-center/src/test/resources/microservice.yaml
+++ b/service-registry/registry-service-center/src/test/resources/microservice.yaml
@@ -21,7 +21,7 @@ service_description:
   properties:
     key1: value1
     key2: value2
-  propertyExtentedClass: org.apache.servicecomb.serviceregistry.MicroServicePropertyExtendedStub
+  propertyExtendedClass: org.apache.servicecomb.serviceregistry.MicroServicePropertyExtendedStub
   paths:
     - path: /test1/testpath
       property:
@@ -32,7 +32,7 @@ service_description:
 instance_description:
   properties:
     key0: value0
-  propertyExtentedClass: org.apache.servicecomb.serviceregistry.MicroServicePropertyExtendedStub
+  propertyExtendedClass: org.apache.servicecomb.serviceregistry.MicroServicePropertyExtendedStub
 
 servicecomb:
   service:
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
index 5804de8..2c9be18 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/client/ZeroConfigClient.java
@@ -16,8 +16,15 @@
  */
 package org.apache.servicecomb.zeroconfig.client;
 
-import com.google.common.annotations.VisibleForTesting;
-import io.vertx.core.json.Json;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.ENCODE;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.EVENT;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.GROUP;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.HEARTBEAT_EVENT;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.INSTANCE_ID;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.PORT;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.SERVICE_ID;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.UNREGISTER_EVENT;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.InetAddress;
@@ -26,15 +33,13 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.commons.lang.StringUtils;
-import org.apache.servicecomb.config.ConfigUtil;
-import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
-import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
 import org.apache.servicecomb.registry.version.Version;
 import org.apache.servicecomb.registry.version.VersionRule;
 import org.apache.servicecomb.registry.version.VersionRuleUtils;
@@ -45,7 +50,9 @@ import org.apache.servicecomb.zeroconfig.server.ZeroConfigRegistryService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.servicecomb.zeroconfig.ZeroConfigRegistryConstants.*;
+import com.google.common.annotations.VisibleForTesting;
+
+import io.vertx.core.json.Json;
 
 public class ZeroConfigClient {
 
@@ -55,10 +62,12 @@ public class ZeroConfigClient {
 
   // Constructor Parameters
   private ZeroConfigRegistryService zeroConfigRegistryService;
+
   private MulticastSocket multicastSocket;
 
   // registration objects
   private Microservice selfMicroservice;
+
   private MicroserviceInstance selfMicroserviceInstance;
 
   // Constructor
@@ -78,11 +87,8 @@ public class ZeroConfigClient {
   }
 
   public void init() {
-    MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
-    MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(
-        loader.getConfigModels());
     MicroserviceFactory microserviceFactory = new MicroserviceFactory();
-    selfMicroservice = microserviceFactory.create(microserviceDefinition);
+    selfMicroservice = microserviceFactory.create();
     selfMicroserviceInstance = selfMicroservice.getInstance();
 
     // set serviceId
@@ -97,7 +103,6 @@ public class ZeroConfigClient {
       String instanceId = ClientUtil.generateServiceInstanceId();
       selfMicroserviceInstance.setInstanceId(instanceId);
     }
-
   }
 
   // builder method
@@ -115,7 +120,8 @@ public class ZeroConfigClient {
   }
 
   public boolean register() {
-    String serviceInstanceId = doRegister(ClientUtil.convertToRegisterDataModel(selfMicroserviceInstance, selfMicroservice));
+    String serviceInstanceId = doRegister(
+        ClientUtil.convertToRegisterDataModel(selfMicroserviceInstance, selfMicroservice));
     return StringUtils.isNotEmpty(serviceInstanceId);
   }
 
@@ -165,7 +171,6 @@ public class ZeroConfigClient {
           foundInstance.getServiceId(), foundInstance.getInstanceId(), e);
       return false;
     }
-
   }
 
   public List<Microservice> getAllMicroservices() {
@@ -295,5 +300,4 @@ public class ZeroConfigClient {
       MicroserviceInstance selfMicroserviceInstance) {
     this.selfMicroserviceInstance = selfMicroserviceInstance;
   }
-
 }