diff --git a/NOTICE b/NOTICE
index 97fefd0..62b2787 100644
--- a/NOTICE
+++ b/NOTICE
@@ -2,13 +2,4 @@
 Copyright 2018-2019 The Apache Software Foundation
 
 This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-This product contains code form the Netty Project:
-
-The Netty Project
-=================
-Please visit the Netty web site for more information:
-  * http://netty.io/
-
-Copyright 2014 The Netty Project
\ No newline at end of file
+The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file
diff --git a/dubbo-spring-boot-actuator/pom.xml b/dubbo-spring-boot-actuator/pom.xml
index 592bcd6..ef7eed3 100644
--- a/dubbo-spring-boot-actuator/pom.xml
+++ b/dubbo-spring-boot-actuator/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -27,12 +28,19 @@
 
     <artifactId>dubbo-spring-boot-actuator</artifactId>
     <packaging>jar</packaging>
-    <name>Apache Dubbo Spring Boot Actuator</name>
+    <name>Apache Dubbo Spring Boot :: Actuator</name>
     <description>Apache Dubbo Spring Boot Actuator</description>
 
     <dependencies>
 
         <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-actuator-compatible</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <!-- Spring Boot -->
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <optional>true</optional>
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointsAutoConfiguration.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfiguration.java
similarity index 85%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointsAutoConfiguration.java
rename to dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfiguration.java
index fd5a7aa..aa65366 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointsAutoConfiguration.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfiguration.java
@@ -17,12 +17,11 @@
 package org.apache.dubbo.spring.boot.actuate.autoconfigure;
 
 import org.apache.dubbo.spring.boot.actuate.endpoint.DubboConfigsMetadataEndpoint;
-import org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpoint;
-import org.apache.dubbo.spring.boot.actuate.endpoint.DubboPropertiesEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboPropertiesMetadataEndpoint;
 import org.apache.dubbo.spring.boot.actuate.endpoint.DubboReferencesMetadataEndpoint;
 import org.apache.dubbo.spring.boot.actuate.endpoint.DubboServicesMetadataEndpoint;
 import org.apache.dubbo.spring.boot.actuate.endpoint.DubboShutdownEndpoint;
-
 import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -31,23 +30,23 @@
 import org.springframework.context.annotation.PropertySource;
 
 /**
- * Dubbo {@link Endpoint} Auto-{@link Configuration}
+ * Dubbo {@link Endpoint @Endpoint} Auto-{@link Configuration} for Spring Boot Actuator 2.0
  *
  * @see Endpoint
  * @see Configuration
- * @since 0.2.0
+ * @since 2.7.0
  */
 @Configuration
 @PropertySource(
         name = "Dubbo Endpoints Default Properties",
         value = "classpath:/META-INF/dubbo-endpoins-default.properties")
-public class DubboEndpointsAutoConfiguration {
+public class DubboEndpointAnnotationAutoConfiguration {
 
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnEnabledEndpoint
-    public DubboEndpoint dubboEndpoint() {
-        return new DubboEndpoint();
+    public DubboMetadataEndpoint dubboEndpoint() {
+        return new DubboMetadataEndpoint();
     }
 
     @Bean
@@ -60,8 +59,8 @@
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnEnabledEndpoint
-    public DubboPropertiesEndpoint dubboPropertiesEndpoint() {
-        return new DubboPropertiesEndpoint();
+    public DubboPropertiesMetadataEndpoint dubboPropertiesEndpoint() {
+        return new DubboPropertiesMetadataEndpoint();
     }
 
     @Bean
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboConfigsMetadataEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboConfigsMetadataEndpoint.java
index 2cce543..0f57fa7 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboConfigsMetadataEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboConfigsMetadataEndpoint.java
@@ -16,74 +16,27 @@
  */
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
-import org.apache.dubbo.config.AbstractConfig;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ConsumerConfig;
-import org.apache.dubbo.config.MethodConfig;
-import org.apache.dubbo.config.ModuleConfig;
-import org.apache.dubbo.config.MonitorConfig;
-import org.apache.dubbo.config.ProtocolConfig;
-import org.apache.dubbo.config.ProviderConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
-
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboConfigsMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.TreeMap;
-
-import static org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors;
 
 /**
  * Dubbo Configs Metadata {@link Endpoint}
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
 @Endpoint(id = "dubboconfigs")
-public class DubboConfigsMetadataEndpoint extends AbstractDubboEndpoint {
+public class DubboConfigsMetadataEndpoint extends AbstractDubboMetadata {
+
+    @Autowired
+    private DubboConfigsMetadata dubboConfigsMetadata;
 
     @ReadOperation
     public Map<String, Map<String, Map<String, Object>>> configs() {
-
-        Map<String, Map<String, Map<String, Object>>> configsMap = new LinkedHashMap<>();
-
-        addDubboConfigBeans(ApplicationConfig.class, configsMap);
-        addDubboConfigBeans(ConsumerConfig.class, configsMap);
-        addDubboConfigBeans(MethodConfig.class, configsMap);
-        addDubboConfigBeans(ModuleConfig.class, configsMap);
-        addDubboConfigBeans(MonitorConfig.class, configsMap);
-        addDubboConfigBeans(ProtocolConfig.class, configsMap);
-        addDubboConfigBeans(ProviderConfig.class, configsMap);
-        addDubboConfigBeans(ReferenceConfig.class, configsMap);
-        addDubboConfigBeans(RegistryConfig.class, configsMap);
-        addDubboConfigBeans(ServiceConfig.class, configsMap);
-
-        return configsMap;
-
-    }
-
-    private void addDubboConfigBeans(Class<? extends AbstractConfig> dubboConfigClass,
-                                     Map<String, Map<String, Map<String, Object>>> configsMap) {
-
-        Map<String, ? extends AbstractConfig> dubboConfigBeans = beansOfTypeIncludingAncestors(applicationContext, dubboConfigClass);
-
-        String name = dubboConfigClass.getSimpleName();
-
-        Map<String, Map<String, Object>> beansMetadata = new TreeMap<>();
-
-        for (Map.Entry<String, ? extends AbstractConfig> entry : dubboConfigBeans.entrySet()) {
-
-            String beanName = entry.getKey();
-            AbstractConfig configBean = entry.getValue();
-            Map<String, Object> configBeanMeta = resolveBeanMetadata(configBean);
-            beansMetadata.put(beanName, configBeanMeta);
-
-        }
-
-        configsMap.put(name, beansMetadata);
-
+        return dubboConfigsMetadata.configs();
     }
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboMetadataEndpoint.java
similarity index 70%
copy from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
copy to dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboMetadataEndpoint.java
index 65de76d..d7d4e58 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboMetadataEndpoint.java
@@ -16,26 +16,28 @@
  */
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 
-import java.util.SortedMap;
-
-import static org.apache.dubbo.spring.boot.util.DubboUtils.filterDubboProperties;
+import java.util.Map;
 
 /**
- * Dubbo Properties {@link Endpoint}
+ * Actuator {@link Endpoint} to expose Dubbo Meta Data
  *
- * @since 1.0.0
+ * @see Endpoint
+ * @since 2.7.0
  */
-@Endpoint(id = "dubboproperties")
-public class DubboPropertiesEndpoint extends AbstractDubboEndpoint {
+@Endpoint(id = "dubbo")
+public class DubboMetadataEndpoint {
+
+    @Autowired
+    private DubboMetadata dubboMetadata;
 
     @ReadOperation
-    public SortedMap<String, Object> properties() {
-
-        return filterDubboProperties(environment);
-
+    public Map<String, Object> invoke() {
+        return dubboMetadata.invoke();
     }
 
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesMetadataEndpoint.java
similarity index 72%
copy from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
copy to dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesMetadataEndpoint.java
index 65de76d..6084d3f 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesMetadataEndpoint.java
@@ -16,26 +16,27 @@
  */
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboPropertiesMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 
 import java.util.SortedMap;
 
-import static org.apache.dubbo.spring.boot.util.DubboUtils.filterDubboProperties;
-
 /**
  * Dubbo Properties {@link Endpoint}
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Endpoint(id = "dubboproperties")
-public class DubboPropertiesEndpoint extends AbstractDubboEndpoint {
+public class DubboPropertiesMetadataEndpoint extends AbstractDubboMetadata {
+
+    @Autowired
+    private DubboPropertiesMetadata dubboPropertiesMetadata;
 
     @ReadOperation
     public SortedMap<String, Object> properties() {
-
-        return filterDubboProperties(environment);
-
+        return dubboPropertiesMetadata.properties();
     }
-
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboReferencesMetadataEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboReferencesMetadataEndpoint.java
index b6aa6ff..54de83c 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboReferencesMetadataEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboReferencesMetadataEndpoint.java
@@ -17,57 +17,27 @@
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
 import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.config.spring.ReferenceBean;
-import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
-
-import org.springframework.beans.factory.annotation.InjectionMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboReferencesMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  * Dubbo {@link Reference} Metadata {@link Endpoint}
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Endpoint(id = "dubboreferences")
-public class DubboReferencesMetadataEndpoint extends AbstractDubboEndpoint {
+public class DubboReferencesMetadataEndpoint extends AbstractDubboMetadata {
+
+    @Autowired
+    private DubboReferencesMetadata dubboReferencesMetadata;
 
     @ReadOperation
     public Map<String, Map<String, Object>> references() {
-
-        Map<String, Map<String, Object>> referencesMetadata = new LinkedHashMap<>();
-
-        ReferenceAnnotationBeanPostProcessor beanPostProcessor = getReferenceAnnotationBeanPostProcessor();
-
-        referencesMetadata.putAll(buildReferencesMetadata(beanPostProcessor.getInjectedFieldReferenceBeanMap()));
-        referencesMetadata.putAll(buildReferencesMetadata(beanPostProcessor.getInjectedMethodReferenceBeanMap()));
-
-        return referencesMetadata;
-
+        return dubboReferencesMetadata.references();
     }
-
-    private Map<String, Map<String, Object>> buildReferencesMetadata(
-            Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> injectedElementReferenceBeanMap) {
-        Map<String, Map<String, Object>> referencesMetadata = new LinkedHashMap<>();
-
-        for (Map.Entry<InjectionMetadata.InjectedElement, ReferenceBean<?>> entry :
-                injectedElementReferenceBeanMap.entrySet()) {
-
-            InjectionMetadata.InjectedElement injectedElement = entry.getKey();
-
-            ReferenceBean<?> referenceBean = entry.getValue();
-
-            Map<String, Object> beanMetadata = resolveBeanMetadata(referenceBean);
-            beanMetadata.put("invoker", resolveBeanMetadata(referenceBean.get()));
-
-            referencesMetadata.put(String.valueOf(injectedElement.getMember()), beanMetadata);
-
-        }
-
-        return referencesMetadata;
-    }
-
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboServicesMetadataEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboServicesMetadataEndpoint.java
index dfef5a8..e92f011 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboServicesMetadataEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboServicesMetadataEndpoint.java
@@ -17,70 +17,27 @@
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
 import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.config.spring.ServiceBean;
-
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboServicesMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  * Dubbo {@link Service} Metadata {@link Endpoint}
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
 @Endpoint(id = "dubboservices")
-public class DubboServicesMetadataEndpoint extends AbstractDubboEndpoint {
+public class DubboServicesMetadataEndpoint extends AbstractDubboMetadata {
+
+    @Autowired
+    private DubboServicesMetadata dubboServicesMetadata;
 
     @ReadOperation
     public Map<String, Map<String, Object>> services() {
-
-        Map<String, ServiceBean> serviceBeansMap = getServiceBeansMap();
-
-        Map<String, Map<String, Object>> servicesMetadata = new LinkedHashMap<>(serviceBeansMap.size());
-
-        for (Map.Entry<String, ServiceBean> entry : serviceBeansMap.entrySet()) {
-
-            String serviceBeanName = entry.getKey();
-
-            ServiceBean serviceBean = entry.getValue();
-
-            Map<String, Object> serviceBeanMetadata = resolveBeanMetadata(serviceBean);
-
-            Object service = resolveServiceBean(serviceBeanName, serviceBean);
-
-            if (service != null) {
-                // Add Service implementation class
-                serviceBeanMetadata.put("serviceClass", service.getClass().getName());
-            }
-
-            servicesMetadata.put(serviceBeanName, serviceBeanMetadata);
-
-        }
-
-        return servicesMetadata;
-
+        return dubboServicesMetadata.services();
     }
-
-    private Object resolveServiceBean(String serviceBeanName, ServiceBean serviceBean) {
-
-        int index = serviceBeanName.indexOf("#");
-
-        if (index > -1) {
-
-            Class<?> interfaceClass = serviceBean.getInterfaceClass();
-
-            String serviceName = serviceBeanName.substring(index + 1);
-
-            if (applicationContext.containsBean(serviceName)) {
-                return applicationContext.getBean(serviceName, interfaceClass);
-            }
-
-        }
-
-        return null;
-
-    }
-
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboShutdownEndpoint.java b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboShutdownEndpoint.java
index a10f4d4..b372472 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboShutdownEndpoint.java
+++ b/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboShutdownEndpoint.java
@@ -16,65 +16,28 @@
  */
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
-import org.apache.dubbo.config.spring.ServiceBean;
-import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
-
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboShutdownMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.TreeMap;
-
-import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistries;
 
 /**
  * Dubbo Shutdown
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
 @Endpoint(id = "dubboshutdown")
-public class DubboShutdownEndpoint extends AbstractDubboEndpoint {
+public class DubboShutdownEndpoint extends AbstractDubboMetadata {
 
+    @Autowired
+    private DubboShutdownMetadata dubboShutdownMetadata;
 
     @WriteOperation
     public Map<String, Object> shutdown() throws Exception {
-
-        Map<String, Object> shutdownCountData = new LinkedHashMap<>();
-
-        // registries
-        int registriesCount = getRegistries().size();
-
-        // protocols
-        int protocolsCount = getProtocolConfigsBeanMap().size();
-
-        shutdownCountData.put("registries", registriesCount);
-        shutdownCountData.put("protocols", protocolsCount);
-
-        // Service Beans
-        Map<String, ServiceBean> serviceBeansMap = getServiceBeansMap();
-        if (!serviceBeansMap.isEmpty()) {
-            for (ServiceBean serviceBean : serviceBeansMap.values()) {
-                serviceBean.destroy();
-            }
-        }
-        shutdownCountData.put("services", serviceBeansMap.size());
-
-        // Reference Beans
-        ReferenceAnnotationBeanPostProcessor beanPostProcessor = getReferenceAnnotationBeanPostProcessor();
-
-        int referencesCount = beanPostProcessor.getReferenceBeans().size();
-
-        beanPostProcessor.destroy();
-
-        shutdownCountData.put("references", referencesCount);
-
-        // Set Result to complete
-        Map<String, Object> shutdownData = new TreeMap<>();
-        shutdownData.put("shutdown.count", shutdownCountData);
-
-
-        return shutdownData;
+        return dubboShutdownMetadata.shutdown();
     }
 
 }
diff --git a/dubbo-spring-boot-actuator/src/main/resources/META-INF/spring.factories b/dubbo-spring-boot-actuator/src/main/resources/META-INF/spring.factories
index f80694c..53a1bb0 100644
--- a/dubbo-spring-boot-actuator/src/main/resources/META-INF/spring.factories
+++ b/dubbo-spring-boot-actuator/src/main/resources/META-INF/spring.factories
@@ -1,3 +1,2 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointsAutoConfiguration,\
-org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboHealthIndicatorAutoConfiguration
\ No newline at end of file
+org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointAnnotationAutoConfiguration
\ No newline at end of file
diff --git a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java b/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfigurationTest.java
similarity index 87%
rename from dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java
rename to dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfigurationTest.java
index 39d06e7..d9747cc 100644
--- a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java
+++ b/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAnnotationAutoConfigurationTest.java
@@ -14,13 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.spring.boot.actuate.endpoint;
-
-import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointsAutoConfiguration;
+package org.apache.dubbo.spring.boot.actuate.autoconfigure;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboConfigsMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboPropertiesMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboReferencesMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboServicesMetadataEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboShutdownEndpoint;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,15 +40,14 @@
 import java.util.function.Supplier;
 
 /**
- * {@link DubboEndpointsAutoConfiguration} Test
+ * {@link DubboEndpointAnnotationAutoConfiguration} Test
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(
         classes = {
-                DubboEndpointsAutoConfiguration.class,
-                DubboEndpointsAutoConfigurationTest.class
+                DubboEndpointAnnotationAutoConfigurationTest.class
         },
         webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
         properties = {
@@ -60,7 +63,7 @@
                 "dubbo.protocol.port=20880",
                 "dubbo.provider.id=my-provider",
                 "dubbo.provider.host=127.0.0.1",
-                "dubbo.scan.basePackages= org.apache.dubbo.spring.boot.actuate.endpoint",
+                "dubbo.scan.basePackages = org.apache.dubbo.spring.boot.actuate.autoconfigure",
                 "management.endpoint.dubbo.enabled = true",
                 "management.endpoint.dubboshutdown.enabled = true",
                 "management.endpoint.dubboconfigs.enabled = true",
@@ -70,16 +73,16 @@
                 "management.endpoints.web.exposure.include = *",
         })
 @EnableAutoConfiguration
-public class DubboEndpointsAutoConfigurationTest {
+public class DubboEndpointAnnotationAutoConfigurationTest {
 
     @Autowired
-    private DubboEndpoint dubboEndpoint;
+    private DubboMetadataEndpoint dubboEndpoint;
 
     @Autowired
     private DubboConfigsMetadataEndpoint dubboConfigsMetadataEndpoint;
 
     @Autowired
-    private DubboPropertiesEndpoint dubboPropertiesEndpoint;
+    private DubboPropertiesMetadataEndpoint dubboPropertiesEndpoint;
 
     @Autowired
     private DubboReferencesMetadataEndpoint dubboReferencesMetadataEndpoint;
@@ -156,7 +159,7 @@
 
         Assert.assertEquals(1, services.size());
 
-        Map<String, Object> demoServiceMeta = services.get("ServiceBean:org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpointsAutoConfigurationTest$DemoService:1.0.0");
+        Map<String, Object> demoServiceMeta = services.get("ServiceBean:org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointAnnotationAutoConfigurationTest$DemoService:1.0.0");
 
         Assert.assertEquals("1.0.0", demoServiceMeta.get("version"));
 
@@ -187,7 +190,7 @@
         Assert.assertEquals("20880", properties.get("dubbo.protocol.port"));
         Assert.assertEquals("my-provider", properties.get("dubbo.provider.id"));
         Assert.assertEquals("127.0.0.1", properties.get("dubbo.provider.host"));
-        Assert.assertEquals("org.apache.dubbo.spring.boot.actuate.endpoint", properties.get("dubbo.scan.basePackages"));
+        Assert.assertEquals("org.apache.dubbo.spring.boot.actuate.autoconfigure", properties.get("dubbo.scan.basePackages"));
     }
 
     @Test
diff --git a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointTest.java b/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointTest.java
index 8634890..040ccf4 100644
--- a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointTest.java
+++ b/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointTest.java
@@ -17,11 +17,11 @@
 package org.apache.dubbo.spring.boot.actuate.endpoint;
 
 import org.apache.dubbo.spring.boot.util.DubboUtils;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
@@ -30,22 +30,23 @@
 import static org.apache.dubbo.common.Version.getVersion;
 
 /**
- * {@link DubboEndpoint} Test
+ * {@link DubboMetadataEndpoint} Test
  *
- * @see DubboEndpoint
- * @since 1.0.0
+ * @see DubboMetadataEndpoint
+ * @since 2.7.0
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(
         classes = {
-                DubboEndpoint.class
+                DubboMetadataEndpoint.class
         }
 )
+@EnableAutoConfiguration
 public class DubboEndpointTest {
 
 
     @Autowired
-    private DubboEndpoint dubboEndpoint;
+    private DubboMetadataEndpoint dubboEndpoint;
 
     @Test
     public void testInvoke() {
diff --git a/dubbo-spring-boot-autoconfigure/pom.xml b/dubbo-spring-boot-autoconfigure/pom.xml
index f50475a..83f1a4b 100644
--- a/dubbo-spring-boot-autoconfigure/pom.xml
+++ b/dubbo-spring-boot-autoconfigure/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -27,11 +28,19 @@
 
     <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
     <packaging>jar</packaging>
-    <name>Apache Dubbo Spring Boot Auto-Configure</name>
+    <name>Apache Dubbo Spring Boot :: Auto-Configure</name>
     <description>Apache Dubbo Spring Boot Auto-Configure</description>
 
 
     <dependencies>
+
+        <!-- Spring Boot Auto-Configuration -->
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-autoconfigure-compatible</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <!-- Spring Boot dependencies -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java b/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinder.java
similarity index 97%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java
rename to dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinder.java
index 7c1dc87..b5d8962 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java
+++ b/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinder.java
@@ -19,7 +19,6 @@
 import org.apache.dubbo.config.AbstractConfig;
 import org.apache.dubbo.config.spring.context.properties.AbstractDubboConfigBinder;
 import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
-
 import org.springframework.boot.context.properties.bind.BindHandler;
 import org.springframework.boot.context.properties.bind.Bindable;
 import org.springframework.boot.context.properties.bind.Binder;
@@ -36,9 +35,9 @@
  * Spring Boot Relaxed {@link DubboConfigBinder} implementation
  * see org.springframework.boot.context.properties.ConfigurationPropertiesBinder
  *
- * @since 0.1.1
+ * @since 2.7.0
  */
-public class RelaxedDubboConfigBinder extends AbstractDubboConfigBinder {
+class BinderDubboConfigBinder extends AbstractDubboConfigBinder {
 
     @Override
     public <C extends AbstractConfig> void bind(String prefix, C dubboConfig) {
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfiguration.java b/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfiguration.java
new file mode 100644
index 0000000..97aa275
--- /dev/null
+++ b/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfiguration.java
@@ -0,0 +1,74 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
+import org.apache.dubbo.config.spring.util.PropertySourcesUtils;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.core.env.AbstractEnvironment;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.PropertyResolver;
+
+import java.util.Map;
+
+import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SCAN_PREFIX;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME;
+import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;
+
+/**
+ * Dubbo Relaxed Binding Auto-{@link Configuration} for Spring Boot 2.0
+ *
+ * @see DubboRelaxedBindingAutoConfiguration
+ * @since 2.7.0
+ */
+@Configuration
+@ConditionalOnProperty(prefix = DUBBO_PREFIX, name = "enabled", matchIfMissing = true)
+@ConditionalOnClass(name = "org.springframework.boot.context.properties.bind.Binder")
+@AutoConfigureBefore(DubboRelaxedBindingAutoConfiguration.class)
+public class DubboRelaxedBinding2AutoConfiguration {
+
+    @Bean(name = BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME)
+    public PropertyResolver dubboScanBasePackagesPropertyResolver(ConfigurableEnvironment environment) {
+        ConfigurableEnvironment propertyResolver = new AbstractEnvironment() {
+            protected void customizePropertySources(MutablePropertySources propertySources) {
+                Map<String, Object> dubboScanProperties = PropertySourcesUtils.getSubProperties(environment, DUBBO_SCAN_PREFIX);
+                propertySources.addLast(new MapPropertySource("dubboScanProperties", dubboScanProperties));
+            }
+        };
+        ConfigurationPropertySources.attach(propertyResolver);
+        return propertyResolver;
+    }
+
+    @ConditionalOnMissingBean(name = RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME, value = DubboConfigBinder.class)
+    @Bean(RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME)
+    @Scope(scopeName = SCOPE_PROTOTYPE)
+    public DubboConfigBinder relaxedDubboConfigBinder() {
+        return new BinderDubboConfigBinder();
+    }
+
+}
diff --git a/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json b/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json
deleted file mode 100644
index 2b52009..0000000
--- a/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json
+++ /dev/null
@@ -1,1098 +0,0 @@
-{
-  "hints": [],
-  "groups": [],
-  "properties": [
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.architecture",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.compiler",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.dump-directory",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.environment",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.logger",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.monitor",
-      "type": "com.alibaba.dubbo.config.MonitorConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.name",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.organization",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.owner",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.qos-accept-foreign-ip",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.qos-enable",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.qos-port",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.registries",
-      "type": "java.util.List<com.alibaba.dubbo.config.RegistryConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.registry",
-      "type": "com.alibaba.dubbo.config.RegistryConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ApplicationConfig",
-      "name": "dubbo.application.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.applications",
-      "description": "Multiple {@link ApplicationConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.ApplicationConfig>"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboConfigProperties",
-      "name": "dubbo.config.multiple",
-      "description": "Indicates multiple properties binding from externalized configuration or not.",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboConfigProperties",
-      "name": "dubbo.config.override",
-      "description": "Indicates override {@link ConfigUtils#getProperties() Dubbo config properties} from externalized configuration\n or not.",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.actives",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.application",
-      "type": "com.alibaba.dubbo.config.ApplicationConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.async",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.cache",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.callbacks",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.check",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.client",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.cluster",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.connections",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.filter",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.generic",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.group",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.init",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "deprecated": true,
-      "name": "dubbo.consumer.injvm",
-      "type": "java.lang.Boolean",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.layer",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.lazy",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.listener",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.loadbalance",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "deprecated": true,
-      "name": "dubbo.consumer.local",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.merger",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.mock",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.module",
-      "type": "com.alibaba.dubbo.config.ModuleConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.monitor",
-      "type": "com.alibaba.dubbo.config.MonitorConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.onconnect",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.ondisconnect",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.owner",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.proxy",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.reconnect",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.registries",
-      "type": "java.util.List<com.alibaba.dubbo.config.RegistryConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.registry",
-      "type": "com.alibaba.dubbo.config.RegistryConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.retries",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.scope",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.sent",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.sticky",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.stub",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.timeout",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.validation",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ConsumerConfig",
-      "name": "dubbo.consumer.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.consumers",
-      "description": "Multiple {@link ConsumerConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.ConsumerConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.monitor",
-      "type": "com.alibaba.dubbo.config.MonitorConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.name",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.organization",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.owner",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.registries",
-      "type": "java.util.List<com.alibaba.dubbo.config.RegistryConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.registry",
-      "type": "com.alibaba.dubbo.config.RegistryConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ModuleConfig",
-      "name": "dubbo.module.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.modules",
-      "description": "Multiple {@link ModuleConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.ModuleConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.address",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.group",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.password",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.protocol",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.username",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.MonitorConfig",
-      "name": "dubbo.monitor.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.monitors",
-      "description": "Multiple {@link MonitorConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.MonitorConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.accepts",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.accesslog",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.buffer",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.charset",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.client",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.codec",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.contextpath",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.dispatcher",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "deprecated": true,
-      "name": "dubbo.protocol.dispather",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.exchanger",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.heartbeat",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.host",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.iothreads",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.name",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.networker",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "deprecated": true,
-      "name": "dubbo.protocol.path",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.payload",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.port",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.prompt",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.queues",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.register",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.serialization",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.server",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.status",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.telnet",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.threadpool",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.threads",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProtocolConfig",
-      "name": "dubbo.protocol.transporter",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.protocols",
-      "description": "Multiple {@link ProtocolConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.ProtocolConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.accepts",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.accesslog",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.actives",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.application",
-      "type": "com.alibaba.dubbo.config.ApplicationConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.async",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.buffer",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.cache",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.callbacks",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.charset",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.client",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.cluster",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.codec",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.connections",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.contextpath",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "deprecated": true,
-      "name": "dubbo.provider.default",
-      "type": "java.lang.Boolean",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.delay",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.deprecated",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.dispatcher",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "deprecated": true,
-      "name": "dubbo.provider.dispather",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.document",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.dynamic",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.exchanger",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.executes",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.export",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.filter",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.group",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.host",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.iothreads",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.layer",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.listener",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.loadbalance",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "deprecated": true,
-      "name": "dubbo.provider.local",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.merger",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.mock",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.module",
-      "type": "com.alibaba.dubbo.config.ModuleConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.monitor",
-      "type": "com.alibaba.dubbo.config.MonitorConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.networker",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.onconnect",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.ondisconnect",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.owner",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "deprecated": true,
-      "name": "dubbo.provider.path",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.payload",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "deprecated": true,
-      "name": "dubbo.provider.port",
-      "type": "java.lang.Integer",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.prompt",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.protocol",
-      "type": "com.alibaba.dubbo.config.ProtocolConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.protocols",
-      "type": "java.util.List<com.alibaba.dubbo.config.ProtocolConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.proxy",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.queues",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.register",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.registries",
-      "type": "java.util.List<com.alibaba.dubbo.config.RegistryConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.registry",
-      "type": "com.alibaba.dubbo.config.RegistryConfig"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.retries",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.scope",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.sent",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.serialization",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.server",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.status",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.stub",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.telnet",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.threadpool",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.threads",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.timeout",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.token",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.transporter",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.validation",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.wait",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.warmup",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.ProviderConfig",
-      "name": "dubbo.provider.weight",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.providers",
-      "description": "Multiple {@link ProviderConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.ProviderConfig>"
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
-      "name": "dubbo.registries",
-      "description": "Multiple {@link RegistryConfig} property",
-      "type": "java.util.Map<java.lang.String,com.alibaba.dubbo.config.RegistryConfig>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.address",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.check",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.client",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.cluster",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.default",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.dynamic",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.file",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.group",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.id",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.parameters",
-      "type": "java.util.Map<java.lang.String,java.lang.String>"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.password",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.port",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.protocol",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.register",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.server",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.session",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.subscribe",
-      "type": "java.lang.Boolean"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.timeout",
-      "type": "java.lang.Integer"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "deprecated": true,
-      "name": "dubbo.registry.transport",
-      "type": "java.lang.String",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.transporter",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.username",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "name": "dubbo.registry.version",
-      "type": "java.lang.String"
-    },
-    {
-      "sourceType": "com.alibaba.dubbo.config.RegistryConfig",
-      "deprecated": true,
-      "name": "dubbo.registry.wait",
-      "type": "java.lang.Integer",
-      "deprecation": {}
-    },
-    {
-      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboScanProperties",
-      "name": "dubbo.scan.base-packages",
-      "description": "The base-packages to scan , the multiple-value is delimited by comma\n\n @see EnableDubbo#scanBasePackages()",
-      "type": "java.util.Set<java.lang.String>"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
index 1ef3d5b..c88a29b 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
+++ b/dubbo-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -1,11 +1,2 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration
-
-
-org.springframework.context.ApplicationListener=\
-org.apache.dubbo.spring.boot.context.event.OverrideDubboConfigApplicationListener,\
-org.apache.dubbo.spring.boot.context.event.WelcomeLogoApplicationListener,\
-org.apache.dubbo.spring.boot.context.event.AwaitingNonWebApplicationListener
-
-org.springframework.boot.env.EnvironmentPostProcessor=\
-org.apache.dubbo.spring.boot.env.DubboDefaultPropertiesEnvironmentPostProcessor
\ No newline at end of file
+org.apache.dubbo.spring.boot.autoconfigure.DubboRelaxedBinding2AutoConfiguration
\ No newline at end of file
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinderTest.java
similarity index 90%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
rename to dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinderTest.java
index fa91c09..8005302 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
+++ b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/BinderDubboConfigBinderTest.java
@@ -19,7 +19,6 @@
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.RegistryConfig;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -29,17 +28,17 @@
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
- * {@link RelaxedDubboConfigBinder} Test
+ * {@link BinderDubboConfigBinder} Test
  *
- * @since 0.1.1
+ * @since 2.7.0
  */
 @RunWith(SpringRunner.class)
 @TestPropertySource(locations = "classpath:/dubbo.properties")
-@ContextConfiguration(classes = RelaxedDubboConfigBinder.class)
-public class RelaxedDubboConfigBinderTest {
+@ContextConfiguration(classes = BinderDubboConfigBinder.class)
+public class BinderDubboConfigBinderTest {
 
     @Autowired
-    private RelaxedDubboConfigBinder dubboConfigBinder;
+    private BinderDubboConfigBinder dubboConfigBinder;
 
     @Test
     public void testBinder() {
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfigurationTest.java b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfigurationTest.java
new file mode 100644
index 0000000..4aee5a5
--- /dev/null
+++ b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBinding2AutoConfigurationTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.core.env.PropertyResolver;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.ClassUtils;
+
+import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME;
+
+/**
+ * {@link DubboRelaxedBinding2AutoConfiguration} Test
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = DubboRelaxedBinding2AutoConfigurationTest.class, properties = {
+        "dubbo.scan.basePackages = org.apache.dubbo.spring.boot.autoconfigure"
+})
+@EnableAutoConfiguration
+public class DubboRelaxedBinding2AutoConfigurationTest {
+
+    @Autowired
+    @Qualifier(BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME)
+    private PropertyResolver propertyResolver;
+
+    @Autowired
+    @Qualifier(RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME)
+    private DubboConfigBinder dubboConfigBinder;
+
+    @Autowired
+    private ObjectProvider<ServiceAnnotationBeanPostProcessor> serviceAnnotationBeanPostProcessor;
+
+    @Autowired
+    private ObjectProvider<ReferenceAnnotationBeanPostProcessor> referenceAnnotationBeanPostProcessor;
+
+    @Test
+    public void testBeans() {
+        Assert.assertTrue(ClassUtils.isAssignableValue(BinderDubboConfigBinder.class, dubboConfigBinder));
+        Assert.assertNotNull(serviceAnnotationBeanPostProcessor);
+        Assert.assertNotNull(serviceAnnotationBeanPostProcessor.getIfAvailable());
+        Assert.assertNotNull(referenceAnnotationBeanPostProcessor);
+        Assert.assertNotNull(referenceAnnotationBeanPostProcessor.getIfAvailable());
+    }
+
+}
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java
index 805b225..2ca3766 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java
+++ b/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java
@@ -30,7 +30,7 @@
  * {@link EnvironmentUtils} Test
  *
  * @see EnvironmentUtils
- * @since 1.0.0
+ * @since 2.7.0
  */
 public class EnvironmentUtilsTest {
 
diff --git a/dubbo-spring-boot-compatible/actuator/pom.xml b/dubbo-spring-boot-compatible/actuator/pom.xml
new file mode 100644
index 0000000..60fbd2f
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.apache.dubbo</groupId>
+        <artifactId>dubbo-spring-boot-compatible</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-spring-boot-actuator-compatible</artifactId>
+    <name>Apache Dubbo Spring Boot :: Compatible :: Actuator</name>
+    <description>Apache Dubbo Spring Boot Compatible for Spring Boot 1.x Actuator</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- Dubbo autoconfigure -->
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-autoconfigure-compatible</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <!-- Dubbo -->
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- Test Dependencies -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfiguration.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfiguration.java
new file mode 100644
index 0000000..a74cab1
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfiguration.java
@@ -0,0 +1,52 @@
+/*
+ * 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.dubbo.spring.boot.actuate.autoconfigure;
+
+
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpoint;
+import org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration;
+import org.apache.dubbo.spring.boot.autoconfigure.DubboRelaxedBindingAutoConfiguration;
+import org.springframework.boot.actuate.condition.ConditionalOnEnabledEndpoint;
+import org.springframework.boot.actuate.endpoint.Endpoint;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Dubbo {@link Endpoint} Auto Configuration is compatible with Spring Boot Actuator 1.x
+ *
+ * @since 2.7.0
+ */
+@Configuration
+@ConditionalOnClass(name = {
+        "org.springframework.boot.actuate.endpoint.Endpoint" // Spring Boot 1.x
+})
+@AutoConfigureAfter(value = {
+        DubboAutoConfiguration.class,
+        DubboRelaxedBindingAutoConfiguration.class
+})
+public class DubboEndpointAutoConfiguration {
+
+    @Bean
+    @ConditionalOnMissingBean
+    @ConditionalOnEnabledEndpoint(value = "dubbo")
+    public DubboEndpoint dubboEndpoint() {
+        return new DubboEndpoint();
+    }
+}
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointMetadataAutoConfiguration.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointMetadataAutoConfiguration.java
new file mode 100644
index 0000000..d525e98
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointMetadataAutoConfiguration.java
@@ -0,0 +1,38 @@
+/*
+ * 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.dubbo.spring.boot.actuate.autoconfigure;
+
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.AbstractDubboMetadata;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Dubbo Endpoints Metadata Auto-{@link Configuration}
+ */
+@ConditionalOnClass(name = {
+        "org.springframework.boot.actuate.health.Health" // If spring-boot-actuator is present
+})
+@Configuration
+@AutoConfigureAfter(name = {
+        "org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration",
+        "org.apache.dubbo.spring.boot.autoconfigure.DubboRelaxedBindingAutoConfiguration"
+})
+@ComponentScan(basePackageClasses = AbstractDubboMetadata.class)
+public class DubboEndpointMetadataAutoConfiguration {
+}
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java
similarity index 74%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java
index 0422fea..333954b 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboHealthIndicatorAutoConfiguration.java
@@ -18,15 +18,10 @@
 
 import org.apache.dubbo.spring.boot.actuate.health.DubboHealthIndicator;
 import org.apache.dubbo.spring.boot.actuate.health.DubboHealthIndicatorProperties;
-import org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration;
-
-import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
 import org.springframework.boot.actuate.health.HealthIndicator;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -35,13 +30,13 @@
  * Dubbo {@link DubboHealthIndicator} Auto Configuration
  *
  * @see HealthIndicator
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Configuration
-@ConditionalOnClass({HealthIndicator.class})
-@AutoConfigureBefore({EndpointAutoConfiguration.class})
-@AutoConfigureAfter(DubboAutoConfiguration.class)
-@ConditionalOnEnabledHealthIndicator("dubbo")
+@ConditionalOnClass(name = {
+        "org.springframework.boot.actuate.health.Health"
+})
+@ConditionalOnProperty(name = "management.health.dubbo.enabled", matchIfMissing = true, havingValue = "true")
 @EnableConfigurationProperties(DubboHealthIndicatorProperties.class)
 public class DubboHealthIndicatorAutoConfiguration {
 
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMvcEndpointManagementContextConfiguration.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMvcEndpointManagementContextConfiguration.java
new file mode 100644
index 0000000..cfe537c
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMvcEndpointManagementContextConfiguration.java
@@ -0,0 +1,48 @@
+/*
+ * 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.dubbo.spring.boot.actuate.autoconfigure;
+
+
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.mvc.DubboMvcEndpoint;
+import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration;
+import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * Dubbo {@link MvcEndpoint} {@link ManagementContextConfiguration} for Spring Boot 1.x
+ *
+ * @since 2.7.0
+ */
+@ManagementContextConfiguration
+@ConditionalOnClass(name = {
+        "org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter"
+})
+@ConditionalOnWebApplication
+public class DubboMvcEndpointManagementContextConfiguration {
+
+    @Bean
+    @ConditionalOnBean(DubboEndpoint.class)
+    @ConditionalOnMissingBean
+    public DubboMvcEndpoint dubboMvcEndpoint(DubboEndpoint dubboEndpoint) {
+        return new DubboMvcEndpoint(dubboEndpoint);
+    }
+}
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java
new file mode 100644
index 0000000..0e0aa75
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java
@@ -0,0 +1,48 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint;
+
+
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboMetadata;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
+import org.springframework.boot.actuate.endpoint.Endpoint;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.util.Map;
+
+/**
+ * Actuator {@link Endpoint} to expose Dubbo Meta Data
+ *
+ * @see Endpoint
+ * @since 2.7.0
+ */
+@ConfigurationProperties(prefix = "endpoints.dubbo", ignoreUnknownFields = false)
+public class DubboEndpoint extends AbstractEndpoint<Map<String, Object>> {
+
+    @Autowired
+    private DubboMetadata dubboMetadata;
+
+    public DubboEndpoint() {
+        super("dubbo", true, false);
+    }
+
+    @Override
+    public Map<String, Object> invoke() {
+        return dubboMetadata.invoke();
+    }
+}
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/AbstractDubboEndpoint.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/AbstractDubboMetadata.java
similarity index 93%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/AbstractDubboEndpoint.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/AbstractDubboMetadata.java
index eae99b4..fb4e01f 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/AbstractDubboEndpoint.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/AbstractDubboMetadata.java
@@ -14,14 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.spring.boot.actuate.endpoint;
+package org.apache.dubbo.spring.boot.actuate.endpoint.metadata;
 
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.spring.ServiceBean;
 import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
-
 import org.springframework.beans.BeansException;
-import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.EnvironmentAware;
@@ -44,11 +42,11 @@
 import static org.springframework.util.ClassUtils.isPrimitiveOrWrapper;
 
 /**
- * Abstract Dubbo {@link Endpoint @Endpoint}
+ * Abstract Dubbo Meatadata
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
-public abstract class AbstractDubboEndpoint implements ApplicationContextAware, EnvironmentAware {
+public abstract class AbstractDubboMetadata implements ApplicationContextAware, EnvironmentAware {
 
     protected ApplicationContext applicationContext;
 
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboConfigsMetadata.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboConfigsMetadata.java
new file mode 100644
index 0000000..46de93e
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboConfigsMetadata.java
@@ -0,0 +1,86 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint.metadata;
+
+import org.apache.dubbo.config.AbstractConfig;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ConsumerConfig;
+import org.apache.dubbo.config.MethodConfig;
+import org.apache.dubbo.config.ModuleConfig;
+import org.apache.dubbo.config.MonitorConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.ProviderConfig;
+import org.apache.dubbo.config.ReferenceConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+import static org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors;
+
+/**
+ * Dubbo Configs Metadata
+ *
+ * @since 2.7.0
+ */
+@Component
+public class DubboConfigsMetadata extends AbstractDubboMetadata {
+
+    public Map<String, Map<String, Map<String, Object>>> configs() {
+
+        Map<String, Map<String, Map<String, Object>>> configsMap = new LinkedHashMap<>();
+
+        addDubboConfigBeans(ApplicationConfig.class, configsMap);
+        addDubboConfigBeans(ConsumerConfig.class, configsMap);
+        addDubboConfigBeans(MethodConfig.class, configsMap);
+        addDubboConfigBeans(ModuleConfig.class, configsMap);
+        addDubboConfigBeans(MonitorConfig.class, configsMap);
+        addDubboConfigBeans(ProtocolConfig.class, configsMap);
+        addDubboConfigBeans(ProviderConfig.class, configsMap);
+        addDubboConfigBeans(ReferenceConfig.class, configsMap);
+        addDubboConfigBeans(RegistryConfig.class, configsMap);
+        addDubboConfigBeans(ServiceConfig.class, configsMap);
+
+        return configsMap;
+
+    }
+
+    private void addDubboConfigBeans(Class<? extends AbstractConfig> dubboConfigClass,
+                                     Map<String, Map<String, Map<String, Object>>> configsMap) {
+
+        Map<String, ? extends AbstractConfig> dubboConfigBeans = beansOfTypeIncludingAncestors(applicationContext, dubboConfigClass);
+
+        String name = dubboConfigClass.getSimpleName();
+
+        Map<String, Map<String, Object>> beansMetadata = new TreeMap<>();
+
+        for (Map.Entry<String, ? extends AbstractConfig> entry : dubboConfigBeans.entrySet()) {
+
+            String beanName = entry.getKey();
+            AbstractConfig configBean = entry.getValue();
+            Map<String, Object> configBeanMeta = resolveBeanMetadata(configBean);
+            beansMetadata.put(beanName, configBeanMeta);
+
+        }
+
+        configsMap.put(name, beansMetadata);
+
+    }
+}
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboMetadata.java
similarity index 85%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboMetadata.java
index 34d2a9b..cf08180 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpoint.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboMetadata.java
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.spring.boot.actuate.endpoint;
+package org.apache.dubbo.spring.boot.actuate.endpoint.metadata;
 
 import org.apache.dubbo.common.Version;
 import org.apache.dubbo.spring.boot.util.DubboUtils;
-
-import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
-import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
+import org.springframework.stereotype.Component;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -32,15 +30,12 @@
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SPRING_BOOT_ISSUES_URL;
 
 /**
- * Actuator {@link Endpoint} to expose Dubbo Meta Data
- *
- * @see Endpoint
- * @since 1.0.0
+ * Dubbo Metadata
+ * @since 2.7.0
  */
-@Endpoint(id = "dubbo")
-public class DubboEndpoint {
+@Component
+public class DubboMetadata {
 
-    @ReadOperation
     public Map<String, Object> invoke() {
 
         Map<String, Object> metaData = new LinkedHashMap<>();
@@ -63,5 +58,4 @@
 
         return metaData;
     }
-
 }
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboPropertiesMetadata.java
similarity index 72%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboPropertiesMetadata.java
index 65de76d..3749a06 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboPropertiesEndpoint.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboPropertiesMetadata.java
@@ -14,28 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.spring.boot.actuate.endpoint;
+package org.apache.dubbo.spring.boot.actuate.endpoint.metadata;
 
-import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
-import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
+import org.springframework.stereotype.Component;
 
 import java.util.SortedMap;
 
 import static org.apache.dubbo.spring.boot.util.DubboUtils.filterDubboProperties;
 
 /**
- * Dubbo Properties {@link Endpoint}
+ * Dubbo Properties Metadata
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
-@Endpoint(id = "dubboproperties")
-public class DubboPropertiesEndpoint extends AbstractDubboEndpoint {
+@Component
+public class DubboPropertiesMetadata extends AbstractDubboMetadata {
 
-    @ReadOperation
     public SortedMap<String, Object> properties() {
-
         return filterDubboProperties(environment);
-
     }
-
-}
+}
\ No newline at end of file
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboReferencesMetadata.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboReferencesMetadata.java
new file mode 100644
index 0000000..e389a6a
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboReferencesMetadata.java
@@ -0,0 +1,70 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint.metadata;
+
+import org.apache.dubbo.config.annotation.Reference;
+import org.apache.dubbo.config.spring.ReferenceBean;
+import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import org.springframework.beans.factory.annotation.InjectionMetadata;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Dubbo {@link Reference} Metadata
+ *
+ * @since 2.7.0
+ */
+@Component
+public class DubboReferencesMetadata extends AbstractDubboMetadata {
+
+    public Map<String, Map<String, Object>> references() {
+
+        Map<String, Map<String, Object>> referencesMetadata = new LinkedHashMap<>();
+
+        ReferenceAnnotationBeanPostProcessor beanPostProcessor = getReferenceAnnotationBeanPostProcessor();
+
+        referencesMetadata.putAll(buildReferencesMetadata(beanPostProcessor.getInjectedFieldReferenceBeanMap()));
+        referencesMetadata.putAll(buildReferencesMetadata(beanPostProcessor.getInjectedMethodReferenceBeanMap()));
+
+        return referencesMetadata;
+
+    }
+
+    private Map<String, Map<String, Object>> buildReferencesMetadata(
+            Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> injectedElementReferenceBeanMap) {
+        Map<String, Map<String, Object>> referencesMetadata = new LinkedHashMap<>();
+
+        for (Map.Entry<InjectionMetadata.InjectedElement, ReferenceBean<?>> entry :
+                injectedElementReferenceBeanMap.entrySet()) {
+
+            InjectionMetadata.InjectedElement injectedElement = entry.getKey();
+
+            ReferenceBean<?> referenceBean = entry.getValue();
+
+            Map<String, Object> beanMetadata = resolveBeanMetadata(referenceBean);
+            beanMetadata.put("invoker", resolveBeanMetadata(referenceBean.get()));
+
+            referencesMetadata.put(String.valueOf(injectedElement.getMember()), beanMetadata);
+
+        }
+
+        return referencesMetadata;
+    }
+
+}
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboServicesMetadata.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboServicesMetadata.java
new file mode 100644
index 0000000..7122e36
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboServicesMetadata.java
@@ -0,0 +1,83 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint.metadata;
+
+import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.spring.ServiceBean;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Dubbo {@link Service} Metadata
+ *
+ * @since 2.7.0
+ */
+@Component
+public class DubboServicesMetadata extends AbstractDubboMetadata {
+
+    public Map<String, Map<String, Object>> services() {
+
+        Map<String, ServiceBean> serviceBeansMap = getServiceBeansMap();
+
+        Map<String, Map<String, Object>> servicesMetadata = new LinkedHashMap<>(serviceBeansMap.size());
+
+        for (Map.Entry<String, ServiceBean> entry : serviceBeansMap.entrySet()) {
+
+            String serviceBeanName = entry.getKey();
+
+            ServiceBean serviceBean = entry.getValue();
+
+            Map<String, Object> serviceBeanMetadata = resolveBeanMetadata(serviceBean);
+
+            Object service = resolveServiceBean(serviceBeanName, serviceBean);
+
+            if (service != null) {
+                // Add Service implementation class
+                serviceBeanMetadata.put("serviceClass", service.getClass().getName());
+            }
+
+            servicesMetadata.put(serviceBeanName, serviceBeanMetadata);
+
+        }
+
+        return servicesMetadata;
+
+    }
+
+    private Object resolveServiceBean(String serviceBeanName, ServiceBean serviceBean) {
+
+        int index = serviceBeanName.indexOf("#");
+
+        if (index > -1) {
+
+            Class<?> interfaceClass = serviceBean.getInterfaceClass();
+
+            String serviceName = serviceBeanName.substring(index + 1);
+
+            if (applicationContext.containsBean(serviceName)) {
+                return applicationContext.getBean(serviceName, interfaceClass);
+            }
+
+        }
+
+        return null;
+
+    }
+
+}
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboShutdownMetadata.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboShutdownMetadata.java
new file mode 100644
index 0000000..225c324
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/metadata/DubboShutdownMetadata.java
@@ -0,0 +1,77 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint.metadata;
+
+import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistries;
+
+/**
+ * Dubbo Shutdown
+ *
+ * @since 2.7.0
+ */
+@Component
+public class DubboShutdownMetadata extends AbstractDubboMetadata {
+
+
+    public Map<String, Object> shutdown() throws Exception {
+
+        Map<String, Object> shutdownCountData = new LinkedHashMap<>();
+
+        // registries
+        int registriesCount = getRegistries().size();
+
+        // protocols
+        int protocolsCount = getProtocolConfigsBeanMap().size();
+
+        shutdownCountData.put("registries", registriesCount);
+        shutdownCountData.put("protocols", protocolsCount);
+
+        // Service Beans
+        Map<String, ServiceBean> serviceBeansMap = getServiceBeansMap();
+        if (!serviceBeansMap.isEmpty()) {
+            for (ServiceBean serviceBean : serviceBeansMap.values()) {
+                serviceBean.destroy();
+            }
+        }
+        shutdownCountData.put("services", serviceBeansMap.size());
+
+        // Reference Beans
+        ReferenceAnnotationBeanPostProcessor beanPostProcessor = getReferenceAnnotationBeanPostProcessor();
+
+        int referencesCount = beanPostProcessor.getReferenceBeans().size();
+
+        beanPostProcessor.destroy();
+
+        shutdownCountData.put("references", referencesCount);
+
+        // Set Result to complete
+        Map<String, Object> shutdownData = new TreeMap<>();
+        shutdownData.put("shutdown.count", shutdownCountData);
+
+
+        return shutdownData;
+    }
+
+}
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/mvc/DubboMvcEndpoint.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/mvc/DubboMvcEndpoint.java
new file mode 100644
index 0000000..fb23504
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/endpoint/mvc/DubboMvcEndpoint.java
@@ -0,0 +1,111 @@
+/*
+ * 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.dubbo.spring.boot.actuate.endpoint.mvc;
+
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboConfigsMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboPropertiesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboReferencesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboServicesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboShutdownMetadata;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
+import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.context.request.async.DeferredResult;
+
+import java.util.Map;
+import java.util.SortedMap;
+
+/**
+ * {@link MvcEndpoint} to expose Dubbo Metadata
+ *
+ * @see MvcEndpoint
+ * @since 2.7.0
+ */
+public class DubboMvcEndpoint extends EndpointMvcAdapter {
+
+    public static final String DUBBO_SHUTDOWN_ENDPOINT_URI = "/shutdown";
+
+    public static final String DUBBO_CONFIGS_ENDPOINT_URI = "/configs";
+
+    public static final String DUBBO_SERVICES_ENDPOINT_URI = "/services";
+
+    public static final String DUBBO_REFERENCES_ENDPOINT_URI = "/references";
+
+    public static final String DUBBO_PROPERTIES_ENDPOINT_URI = "/properties";
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private DubboShutdownMetadata dubboShutdownMetadata;
+
+    @Autowired
+    private DubboConfigsMetadata dubboConfigsMetadata;
+
+    @Autowired
+    private DubboServicesMetadata dubboServicesMetadata;
+
+    @Autowired
+    private DubboReferencesMetadata dubboReferencesMetadata;
+
+    @Autowired
+    private DubboPropertiesMetadata dubboPropertiesMetadata;
+
+    public DubboMvcEndpoint(DubboEndpoint dubboEndpoint) {
+        super(dubboEndpoint);
+    }
+
+
+    @RequestMapping(value = DUBBO_SHUTDOWN_ENDPOINT_URI, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public DeferredResult shutdown() throws Exception {
+        Map<String, Object> shutdownCountData = dubboShutdownMetadata.shutdown();
+        return new DeferredResult(null, shutdownCountData);
+    }
+
+    @RequestMapping(value = DUBBO_CONFIGS_ENDPOINT_URI, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public Map<String, Map<String, Map<String, Object>>> configs() {
+        return dubboConfigsMetadata.configs();
+    }
+
+
+    @RequestMapping(value = DUBBO_SERVICES_ENDPOINT_URI, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public Map<String, Map<String, Object>> services() {
+        return dubboServicesMetadata.services();
+    }
+
+    @RequestMapping(value = DUBBO_REFERENCES_ENDPOINT_URI, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public Map<String, Map<String, Object>> references() {
+        return dubboReferencesMetadata.references();
+    }
+
+    @RequestMapping(value = DUBBO_PROPERTIES_ENDPOINT_URI, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public SortedMap<String, Object> properties() {
+        return dubboPropertiesMetadata.properties();
+
+    }
+}
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java
similarity index 99%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java
index 2b2cf17..c937dc6 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicator.java
@@ -20,7 +20,6 @@
 import org.apache.dubbo.common.status.StatusChecker;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.ProviderConfig;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.health.AbstractHealthIndicator;
 import org.springframework.boot.actuate.health.Health;
@@ -38,7 +37,7 @@
  * Dubbo {@link HealthIndicator}
  *
  * @see HealthIndicator
- * @since 1.0.0
+ * @since 2.7.0
  */
 public class DubboHealthIndicator extends AbstractHealthIndicator {
 
diff --git a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java
similarity index 99%
rename from dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java
rename to dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java
index d931b19..7699293 100644
--- a/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java
+++ b/dubbo-spring-boot-compatible/actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorProperties.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.spring.boot.actuate.health;
 
 import org.apache.dubbo.common.status.StatusChecker;
-
 import org.springframework.boot.actuate.health.HealthIndicator;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -31,7 +30,7 @@
  * Dubbo {@link HealthIndicator} Properties
  *
  * @see HealthIndicator
- * @since 1.0.0
+ * @since 2.7.0
  */
 @ConfigurationProperties(prefix = PREFIX, ignoreUnknownFields = false)
 public class DubboHealthIndicatorProperties {
diff --git a/dubbo-spring-boot-compatible/actuator/src/main/resources/META-INF/spring.factories b/dubbo-spring-boot-compatible/actuator/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..bea4633
--- /dev/null
+++ b/dubbo-spring-boot-compatible/actuator/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,6 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointAutoConfiguration,\
+org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboHealthIndicatorAutoConfiguration,\
+org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointMetadataAutoConfiguration
+org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration=\
+org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboMvcEndpointManagementContextConfiguration
\ No newline at end of file
diff --git a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java b/dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfigurationTest.java
similarity index 75%
copy from dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java
copy to dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfigurationTest.java
index 39d06e7..9f5f51e 100644
--- a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/endpoint/DubboEndpointsAutoConfigurationTest.java
+++ b/dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboEndpointAutoConfigurationTest.java
@@ -14,13 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.spring.boot.actuate.endpoint;
-
-import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointsAutoConfiguration;
+package org.apache.dubbo.spring.boot.actuate.autoconfigure;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpoint;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboConfigsMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboPropertiesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboReferencesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboServicesMetadata;
+import org.apache.dubbo.spring.boot.actuate.endpoint.metadata.DubboShutdownMetadata;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,15 +40,15 @@
 import java.util.function.Supplier;
 
 /**
- * {@link DubboEndpointsAutoConfiguration} Test
+ * {@link DubboEndpointAutoConfiguration} Test
  *
- * @since 0.2.0
+ * @since 2.7.0
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(
         classes = {
-                DubboEndpointsAutoConfiguration.class,
-                DubboEndpointsAutoConfigurationTest.class
+                DubboEndpointAutoConfiguration.class,
+                DubboEndpointAutoConfigurationTest.class
         },
         webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
         properties = {
@@ -60,48 +64,51 @@
                 "dubbo.protocol.port=20880",
                 "dubbo.provider.id=my-provider",
                 "dubbo.provider.host=127.0.0.1",
-                "dubbo.scan.basePackages= org.apache.dubbo.spring.boot.actuate.endpoint",
-                "management.endpoint.dubbo.enabled = true",
-                "management.endpoint.dubboshutdown.enabled = true",
-                "management.endpoint.dubboconfigs.enabled = true",
-                "management.endpoint.dubboservices.enabled = true",
-                "management.endpoint.dubboreferences.enabled = true",
-                "management.endpoint.dubboproperties.enabled = true",
-                "management.endpoints.web.exposure.include = *",
+                "dubbo.scan.basePackages=org.apache.dubbo.spring.boot.actuate.autoconfigure",
+                "endpoints.enabled = true",
+                "management.security.enabled = false",
+                "management.contextPath = /actuator",
+                "endpoints.dubbo.enabled = true",
+                "endpoints.dubbo.sensitive = false",
+                "endpoints.dubboshutdown.enabled = true",
+                "endpoints.dubboconfigs.enabled = true",
+                "endpoints.dubboservices.enabled = true",
+                "endpoints.dubboreferences.enabled = true",
+                "endpoints.dubboproperties.enabled = true",
         })
 @EnableAutoConfiguration
-public class DubboEndpointsAutoConfigurationTest {
+public class DubboEndpointAutoConfigurationTest {
 
     @Autowired
     private DubboEndpoint dubboEndpoint;
 
     @Autowired
-    private DubboConfigsMetadataEndpoint dubboConfigsMetadataEndpoint;
+    private DubboConfigsMetadata dubboConfigsMetadata;
 
     @Autowired
-    private DubboPropertiesEndpoint dubboPropertiesEndpoint;
+    private DubboPropertiesMetadata dubboProperties;
 
     @Autowired
-    private DubboReferencesMetadataEndpoint dubboReferencesMetadataEndpoint;
+    private DubboReferencesMetadata dubboReferencesMetadata;
 
     @Autowired
-    private DubboServicesMetadataEndpoint dubboServicesMetadataEndpoint;
+    private DubboServicesMetadata dubboServicesMetadata;
 
     @Autowired
-    private DubboShutdownEndpoint dubboShutdownEndpoint;
+    private DubboShutdownMetadata dubboShutdownMetadata;
 
     private RestTemplate restTemplate = new RestTemplate();
 
     @Autowired
     private ObjectMapper objectMapper;
 
-    @Value("http://127.0.0.1:${local.management.port}${management.endpoints.web.base-path:/actuator}")
+    @Value("http://127.0.0.1:${local.management.port}${management.contextPath:}")
     private String actuatorBaseURL;
 
     @Test
     public void testShutdown() throws Exception {
 
-        Map<String, Object> value = dubboShutdownEndpoint.shutdown();
+        Map<String, Object> value = dubboShutdownMetadata.shutdown();
 
         Map<String, Object> shutdownCounts = (Map<String, Object>) value.get("shutdown.count");
 
@@ -115,7 +122,7 @@
     @Test
     public void testConfigs() {
 
-        Map<String, Map<String, Map<String, Object>>> configsMap = dubboConfigsMetadataEndpoint.configs();
+        Map<String, Map<String, Map<String, Object>>> configsMap = dubboConfigsMetadata.configs();
 
         Map<String, Map<String, Object>> beansMetadata = configsMap.get("ApplicationConfig");
         Assert.assertEquals("dubbo-demo-application", beansMetadata.get("my-application").get("name"));
@@ -152,11 +159,11 @@
     @Test
     public void testServices() {
 
-        Map<String, Map<String, Object>> services = dubboServicesMetadataEndpoint.services();
+        Map<String, Map<String, Object>> services = dubboServicesMetadata.services();
 
         Assert.assertEquals(1, services.size());
 
-        Map<String, Object> demoServiceMeta = services.get("ServiceBean:org.apache.dubbo.spring.boot.actuate.endpoint.DubboEndpointsAutoConfigurationTest$DemoService:1.0.0");
+        Map<String, Object> demoServiceMeta = services.get("ServiceBean:org.apache.dubbo.spring.boot.actuate.autoconfigure.DubboEndpointAutoConfigurationTest$DemoService:1.0.0");
 
         Assert.assertEquals("1.0.0", demoServiceMeta.get("version"));
 
@@ -165,7 +172,7 @@
     @Test
     public void testReferences() {
 
-        Map<String, Map<String, Object>> references = dubboReferencesMetadataEndpoint.references();
+        Map<String, Map<String, Object>> references = dubboReferencesMetadata.references();
 
         Assert.assertTrue(references.isEmpty());
 
@@ -174,7 +181,7 @@
     @Test
     public void testProperties() {
 
-        SortedMap<String, Object> properties = dubboPropertiesEndpoint.properties();
+        SortedMap<String, Object> properties = dubboProperties.properties();
 
         Assert.assertEquals("my-application", properties.get("dubbo.application.id"));
         Assert.assertEquals("dubbo-demo-application", properties.get("dubbo.application.name"));
@@ -187,16 +194,16 @@
         Assert.assertEquals("20880", properties.get("dubbo.protocol.port"));
         Assert.assertEquals("my-provider", properties.get("dubbo.provider.id"));
         Assert.assertEquals("127.0.0.1", properties.get("dubbo.provider.host"));
-        Assert.assertEquals("org.apache.dubbo.spring.boot.actuate.endpoint", properties.get("dubbo.scan.basePackages"));
+        Assert.assertEquals("org.apache.dubbo.spring.boot.actuate.autoconfigure", properties.get("dubbo.scan.basePackages"));
     }
 
     @Test
     public void testHttpEndpoints() throws JsonProcessingException {
 //        testHttpEndpoint("/dubbo", dubboEndpoint::invoke);
-        testHttpEndpoint("/dubbo/configs", dubboConfigsMetadataEndpoint::configs);
-        testHttpEndpoint("/dubbo/services", dubboServicesMetadataEndpoint::services);
-        testHttpEndpoint("/dubbo/references", dubboReferencesMetadataEndpoint::references);
-        testHttpEndpoint("/dubbo/properties", dubboPropertiesEndpoint::properties);
+        testHttpEndpoint("/dubbo/configs", dubboConfigsMetadata::configs);
+        testHttpEndpoint("/dubbo/services", dubboServicesMetadata::services);
+        testHttpEndpoint("/dubbo/references", dubboReferencesMetadata::references);
+        testHttpEndpoint("/dubbo/properties", dubboProperties::properties);
     }
 
     private void testHttpEndpoint(String actuatorURI, Supplier<Map> resultsSupplier) throws JsonProcessingException {
diff --git a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java b/dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java
similarity index 95%
rename from dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java
rename to dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java
index 6a2efe3..a3ac06d 100644
--- a/dubbo-spring-boot-actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java
+++ b/dubbo-spring-boot-compatible/actuator/src/test/java/org/apache/dubbo/spring/boot/actuate/health/DubboHealthIndicatorTest.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.spring.boot.actuate.health;
 
 import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -27,7 +26,7 @@
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.Map;
 
@@ -35,9 +34,9 @@
  * {@link DubboHealthIndicator} Test
  *
  * @see DubboHealthIndicator
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @TestPropertySource(properties = {
         "dubbo.protocol.id = dubbo-protocol",
         "dubbo.protocol.name = dubbo",
diff --git a/dubbo-spring-boot-compatible/autoconfigure/pom.xml b/dubbo-spring-boot-compatible/autoconfigure/pom.xml
new file mode 100644
index 0000000..f1b0e12
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.apache.dubbo</groupId>
+        <artifactId>dubbo-spring-boot-compatible</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-spring-boot-autoconfigure-compatible</artifactId>
+    <name>Apache Dubbo Spring Boot :: Compatible :: Auto-Configure</name>
+    <description>Apache Dubbo Spring Boot Compatible for Spring Boot 1.x Auto-Configure</description>
+
+
+    <dependencies>
+
+        <!-- Spring Boot dependencies -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- Dubbo -->
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- Test Dependencies -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java
similarity index 70%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java
index d90bd0d..f49e49e 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfiguration.java
@@ -16,72 +16,60 @@
  */
 package org.apache.dubbo.spring.boot.autoconfigure;
 
-import org.apache.dubbo.config.AbstractConfig;
-import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
 import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
-import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
 import org.apache.dubbo.config.spring.context.annotation.DubboConfigConfiguration;
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.bind.Binder;
-import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Scope;
-import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertyResolver;
 
 import java.util.Set;
 
 import static java.util.Collections.emptySet;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_CONFIG_PREFIX;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SCAN_PREFIX;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.MULTIPLE_CONFIG_PROPERTY_NAME;
-import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;
 
 /**
  * Dubbo Auto {@link Configuration}
  *
- * @see ApplicationConfig
- * @see Service
  * @see Reference
- * @see DubboComponentScan
- * @see EnableDubboConfig
- * @see EnableDubbo
- * @since 1.0.0
+ * @see Service
+ * @see ServiceAnnotationBeanPostProcessor
+ * @see ReferenceAnnotationBeanPostProcessor
+ * @since 2.7.0
  */
+@ConditionalOnProperty(prefix = DUBBO_PREFIX, name = "enabled", matchIfMissing = true)
 @Configuration
-@ConditionalOnProperty(prefix = DUBBO_PREFIX, name = "enabled", matchIfMissing = true, havingValue = "true")
-@ConditionalOnClass(AbstractConfig.class)
+@AutoConfigureAfter(DubboRelaxedBindingAutoConfiguration.class)
 public class DubboAutoConfiguration {
 
     /**
      * Creates {@link ServiceAnnotationBeanPostProcessor} Bean
      *
-     * @param environment {@link Environment} Bean
+     * @param propertyResolver {@link PropertyResolver} Bean
      * @return {@link ServiceAnnotationBeanPostProcessor}
      */
-    @ConditionalOnProperty(name = BASE_PACKAGES_PROPERTY_NAME)
-    @ConditionalOnClass(ConfigurationPropertySources.class)
+    @ConditionalOnProperty(prefix = DUBBO_SCAN_PREFIX, name = BASE_PACKAGES_PROPERTY_NAME)
+    @ConditionalOnBean(name = BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME)
     @Bean
-    public ServiceAnnotationBeanPostProcessor serviceAnnotationBeanPostProcessor(Environment environment) {
-        Set<String> packagesToScan = environment.getProperty(BASE_PACKAGES_PROPERTY_NAME, Set.class, emptySet());
+    public ServiceAnnotationBeanPostProcessor serviceAnnotationBeanPostProcessor(
+            @Qualifier(BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME) PropertyResolver propertyResolver) {
+        Set<String> packagesToScan = propertyResolver.getProperty(BASE_PACKAGES_PROPERTY_NAME, Set.class, emptySet());
         return new ServiceAnnotationBeanPostProcessor(packagesToScan);
     }
 
-    @ConditionalOnClass(Binder.class)
-    @Bean
-    @Scope(scopeName = SCOPE_PROTOTYPE)
-    public RelaxedDubboConfigBinder relaxedDubboConfigBinder() {
-        return new RelaxedDubboConfigBinder();
-    }
-
     /**
      * Creates {@link ReferenceAnnotationBeanPostProcessor} Bean if Absent
      *
@@ -109,7 +97,7 @@
      * @see EnableDubboConfig
      * @see DubboConfigConfiguration.Multiple
      */
-    @ConditionalOnProperty(name = MULTIPLE_CONFIG_PROPERTY_NAME, havingValue = "true")
+    @ConditionalOnProperty(prefix = DUBBO_CONFIG_PREFIX, name = MULTIPLE_CONFIG_PROPERTY_NAME, matchIfMissing = true)
     @EnableDubboConfig(multiple = true)
     protected static class MultipleDubboConfigConfiguration {
     }
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBindingAutoConfiguration.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBindingAutoConfiguration.java
new file mode 100644
index 0000000..4de242e
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/DubboRelaxedBindingAutoConfiguration.java
@@ -0,0 +1,55 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertyResolver;
+
+import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SCAN_PREFIX;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME;
+import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;
+
+/**
+ * Dubbo Relaxed Binding Auto-{@link Configuration} for Spring Boot 1.x
+ */
+@ConditionalOnProperty(prefix = DUBBO_PREFIX, name = "enabled", matchIfMissing = true)
+@ConditionalOnClass(name = "org.springframework.boot.bind.RelaxedPropertyResolver")
+@Configuration
+public class DubboRelaxedBindingAutoConfiguration {
+
+    @Bean(name = BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME)
+    public PropertyResolver dubboScanBasePackagesPropertyResolver(Environment environment) {
+        return new RelaxedPropertyResolver(environment, DUBBO_SCAN_PREFIX);
+    }
+
+    @ConditionalOnMissingBean(name = RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME, value = DubboConfigBinder.class)
+    @Bean(RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME)
+    @Scope(scopeName = SCOPE_PROTOTYPE)
+    public DubboConfigBinder relaxedDubboConfigBinder() {
+        return new RelaxedDubboConfigBinder();
+    }
+}
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java
new file mode 100644
index 0000000..b0e8480
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinder.java
@@ -0,0 +1,49 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.AbstractConfig;
+import org.apache.dubbo.config.spring.context.properties.AbstractDubboConfigBinder;
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.boot.bind.RelaxedDataBinder;
+
+import java.util.Map;
+
+import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties;
+
+/**
+ * Spring Boot Relaxed {@link DubboConfigBinder} implementation
+ *
+ * @since 2.7.0
+ */
+class RelaxedDubboConfigBinder extends AbstractDubboConfigBinder {
+
+    @Override
+    public <C extends AbstractConfig> void bind(String prefix, C dubboConfig) {
+        RelaxedDataBinder relaxedDataBinder = new RelaxedDataBinder(dubboConfig);
+        // Set ignored*
+        relaxedDataBinder.setIgnoreInvalidFields(isIgnoreInvalidFields());
+        relaxedDataBinder.setIgnoreUnknownFields(isIgnoreUnknownFields());
+        // Get properties under specified prefix from PropertySources
+        Map<String, Object> properties = getSubProperties(getPropertySources(), prefix);
+        // Convert Map to MutablePropertyValues
+        MutablePropertyValues propertyValues = new MutablePropertyValues(properties);
+        // Bind
+        relaxedDataBinder.bind(propertyValues);
+    }
+}
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java
similarity index 80%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java
index f4a94d2..738c2b1 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListener.java
@@ -19,12 +19,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.WebApplicationType;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextClosedEvent;
 import org.springframework.context.event.SmartApplicationListener;
+import org.springframework.util.ClassUtils;
 import org.springframework.util.ObjectUtils;
 
 import java.util.concurrent.ExecutorService;
@@ -37,10 +38,15 @@
 /**
  * Awaiting Non-Web Spring Boot {@link ApplicationListener}
  *
- * @since 0.1.1
+ * @since 2.7.0
  */
 public class AwaitingNonWebApplicationListener implements SmartApplicationListener {
 
+    private static final String[] WEB_APPLICATION_CONTEXT_CLASSES = new String[]{
+            "org.springframework.web.context.WebApplicationContext",
+            "org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext"
+    };
+
     private static final Logger logger = LoggerFactory.getLogger(AwaitingNonWebApplicationListener.class);
 
     private static final Class<? extends ApplicationEvent>[] SUPPORTED_APPLICATION_EVENTS =
@@ -90,12 +96,30 @@
 
         final SpringApplication springApplication = event.getSpringApplication();
 
-        if (!WebApplicationType.NONE.equals(springApplication.getWebApplicationType())) {
+        if (isWebApplication(event.getApplicationContext(), springApplication.getClassLoader())) {
             return;
         }
 
         await();
+    }
 
+    private static boolean isWebApplication(ApplicationContext applicationContext, ClassLoader classLoader) {
+        boolean webApplication = false;
+        for (String contextClass : WEB_APPLICATION_CONTEXT_CLASSES) {
+            if (isAssignable(contextClass, applicationContext.getClass(), classLoader)) {
+                webApplication = true;
+                break;
+            }
+        }
+        return webApplication;
+    }
+
+    private static boolean isAssignable(String target, Class<?> type, ClassLoader classLoader) {
+        try {
+            return ClassUtils.resolveClassName(target, classLoader).isAssignableFrom(type);
+        } catch (Throwable ex) {
+            return false;
+        }
     }
 
     protected void onContextClosedEvent(ContextClosedEvent event) {
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java
similarity index 94%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java
index 319c1d9..6e6826b 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListener.java
@@ -18,7 +18,6 @@
 
 import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.config.AbstractConfig;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
@@ -30,7 +29,7 @@
 import java.util.SortedMap;
 
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DEFAULT_OVERRIDE_CONFIG_PROPERTY_VALUE;
-import static org.apache.dubbo.spring.boot.util.DubboUtils.OVERRIDE_CONFIG_PROPERTY_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.OVERRIDE_CONFIG_FULL_PROPERTY_NAME;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.filterDubboProperties;
 
 /**
@@ -40,7 +39,7 @@
  * <p>
  *
  * @see ConfigUtils
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Order // LOWEST_PRECEDENCE Make sure last execution
 public class OverrideDubboConfigApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
@@ -56,7 +55,7 @@
 
         ConfigurableEnvironment environment = event.getEnvironment();
 
-        boolean override = environment.getProperty(OVERRIDE_CONFIG_PROPERTY_NAME, boolean.class,
+        boolean override = environment.getProperty(OVERRIDE_CONFIG_FULL_PROPERTY_NAME, boolean.class,
                 DEFAULT_OVERRIDE_CONFIG_PROPERTY_VALUE);
 
         if (override) {
@@ -66,19 +65,12 @@
             ConfigUtils.getProperties().putAll(dubboProperties);
 
             if (logger.isInfoEnabled()) {
-
                 logger.info("Dubbo Config was overridden by externalized configuration {}", dubboProperties);
-
             }
-
         } else {
-
             if (logger.isInfoEnabled()) {
-
-                logger.info("Disable override Dubbo Config caused by property {} = {}", OVERRIDE_CONFIG_PROPERTY_NAME, override);
-
+                logger.info("Disable override Dubbo Config caused by property {} = {}", OVERRIDE_CONFIG_FULL_PROPERTY_NAME, override);
             }
-
         }
 
     }
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java
similarity index 95%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java
index 1db2438..f053227 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListener.java
@@ -17,12 +17,11 @@
 package org.apache.dubbo.spring.boot.context.event;
 
 import org.apache.dubbo.common.Version;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
-import org.springframework.boot.context.logging.LoggingApplicationListener;
 import org.springframework.context.ApplicationListener;
+import org.springframework.core.Ordered;
 import org.springframework.core.annotation.Order;
 
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -36,9 +35,9 @@
  * Dubbo Welcome Logo {@link ApplicationListener}
  *
  * @see ApplicationListener
- * @since 1.0.0
+ * @since 2.7.0
  */
-@Order(LoggingApplicationListener.DEFAULT_ORDER + 1)
+@Order(Ordered.HIGHEST_PRECEDENCE + 20 + 1)  // After LoggingApplicationListener#DEFAULT_ORDER
 public class WelcomeLogoApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
 
     private static AtomicBoolean processed = new AtomicBoolean(false);
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java
similarity index 99%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java
index 3e406c7..0efbc6b 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessor.java
@@ -19,7 +19,6 @@
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfigBinding;
-
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.context.ContextIdApplicationContextInitializer;
 import org.springframework.boot.env.EnvironmentPostProcessor;
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java
similarity index 78%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java
index ba0e9c7..5b9fcd4 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/DubboUtils.java
@@ -16,7 +16,10 @@
  */
 package org.apache.dubbo.spring.boot.util;
 
+import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
 import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.PropertyResolver;
 
 import java.util.Collections;
 import java.util.Map;
@@ -26,7 +29,7 @@
 /**
  * The utilities class for Dubbo
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
 public abstract class DubboUtils {
 
@@ -49,38 +52,38 @@
     /**
      * The prefix of property name for Dubbo scan
      */
-    public static final String DUBBO_SCAN_PREFIX = DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR + "scan";
+    public static final String DUBBO_SCAN_PREFIX = DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR + "scan" + PROPERTY_NAME_SEPARATOR;
 
     /**
-     * The prefix of property name for Dubbo Config.ØØ
+     * The prefix of property name for Dubbo Config
      */
-    public static final String DUBBO_CONFIG_PREFIX = DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR + "config";
+    public static final String DUBBO_CONFIG_PREFIX = DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR + "config" + PROPERTY_NAME_SEPARATOR;
 
     /**
      * The property name of base packages to scan
      * <p>
      * The default value is empty set.
      */
-    public static final String BASE_PACKAGES_PROPERTY_NAME = DUBBO_SCAN_PREFIX + PROPERTY_NAME_SEPARATOR + "base-packages";
+    public static final String BASE_PACKAGES_PROPERTY_NAME = "base-packages";
 
     /**
      * The property name of multiple properties binding from externalized configuration
      * <p>
      * The default value is {@link #DEFAULT_MULTIPLE_CONFIG_PROPERTY_VALUE}
      */
-    public static final String MULTIPLE_CONFIG_PROPERTY_NAME = DUBBO_CONFIG_PREFIX + PROPERTY_NAME_SEPARATOR + "multiple";
+    public static final String MULTIPLE_CONFIG_PROPERTY_NAME = "multiple";
 
     /**
      * The default value of multiple properties binding from externalized configuration
      */
-    public static final boolean DEFAULT_MULTIPLE_CONFIG_PROPERTY_VALUE = false;
+    public static final boolean DEFAULT_MULTIPLE_CONFIG_PROPERTY_VALUE = true;
 
     /**
      * The property name of override Dubbo config
      * <p>
      * The default value is {@link #DEFAULT_OVERRIDE_CONFIG_PROPERTY_VALUE}
      */
-    public static final String OVERRIDE_CONFIG_PROPERTY_NAME = DUBBO_CONFIG_PREFIX + PROPERTY_NAME_SEPARATOR + "override";
+    public static final String OVERRIDE_CONFIG_FULL_PROPERTY_NAME = DUBBO_CONFIG_PREFIX + "override";
 
     /**
      * The default property value of  override Dubbo config
@@ -114,6 +117,16 @@
     public static final String DUBBO_MAILING_LIST = "dev@dubbo.apache.org";
 
     /**
+     * The bean name of Relaxed-binding {@link DubboConfigBinder}
+     */
+    public static final String RELAXED_DUBBO_CONFIG_BINDER_BEAN_NAME = "relaxedDubboConfigBinder";
+
+    /**
+     * The bean name of {@link PropertyResolver} for {@link ServiceAnnotationBeanPostProcessor}'s base-packages
+     */
+    public static final String BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME = "dubboScanBasePackagesPropertyResolver";
+
+    /**
      * Filters Dubbo Properties from {@link ConfigurableEnvironment}
      *
      * @param environment {@link ConfigurableEnvironment}
diff --git a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java
similarity index 99%
rename from dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java
index 1f0e118..943c1a4 100644
--- a/dubbo-spring-boot-autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/util/EnvironmentUtils.java
@@ -32,7 +32,7 @@
  * The utilities class for {@link Environment}
  *
  * @see Environment
- * @since 1.0.0
+ * @since 2.7.0
  */
 public abstract class EnvironmentUtils {
 
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json b/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json
new file mode 100644
index 0000000..d810121
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json
@@ -0,0 +1,1098 @@
+{
+  "hints": [],
+  "groups": [],
+  "properties": [
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.architecture",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.compiler",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.dump-directory",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.environment",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.logger",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.monitor",
+      "type": "org.apache.dubbo.config.MonitorConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.organization",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.owner",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.qos-accept-foreign-ip",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.qos-enable",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.qos-port",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.registries",
+      "type": "java.util.List<org.apache.dubbo.config.RegistryConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.registry",
+      "type": "org.apache.dubbo.config.RegistryConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ApplicationConfig",
+      "name": "dubbo.application.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.applications",
+      "description": "Multiple {@link ApplicationConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.ApplicationConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboConfigProperties",
+      "name": "dubbo.config.multiple",
+      "description": "Indicates multiple properties binding from externalized configuration or not.",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboConfigProperties",
+      "name": "dubbo.config.override",
+      "description": "Indicates override {@link ConfigUtils#getProperties() Dubbo config properties} from externalized configuration\n or not.",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.actives",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.application",
+      "type": "org.apache.dubbo.config.ApplicationConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.async",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.cache",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.callbacks",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.check",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.client",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.cluster",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.connections",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.filter",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.generic",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.group",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.init",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "deprecated": true,
+      "name": "dubbo.consumer.injvm",
+      "type": "java.lang.Boolean",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.layer",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.lazy",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.listener",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.loadbalance",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "deprecated": true,
+      "name": "dubbo.consumer.local",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.merger",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.mock",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.module",
+      "type": "org.apache.dubbo.config.ModuleConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.monitor",
+      "type": "org.apache.dubbo.config.MonitorConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.onconnect",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.ondisconnect",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.owner",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.proxy",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.reconnect",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.registries",
+      "type": "java.util.List<org.apache.dubbo.config.RegistryConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.registry",
+      "type": "org.apache.dubbo.config.RegistryConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.retries",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.scope",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.sent",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.sticky",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.stub",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.timeout",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.validation",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ConsumerConfig",
+      "name": "dubbo.consumer.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.consumers",
+      "description": "Multiple {@link ConsumerConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.ConsumerConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.monitor",
+      "type": "org.apache.dubbo.config.MonitorConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.organization",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.owner",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.registries",
+      "type": "java.util.List<org.apache.dubbo.config.RegistryConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.registry",
+      "type": "org.apache.dubbo.config.RegistryConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ModuleConfig",
+      "name": "dubbo.module.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.modules",
+      "description": "Multiple {@link ModuleConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.ModuleConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.address",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.group",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.password",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.protocol",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.username",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.MonitorConfig",
+      "name": "dubbo.monitor.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.monitors",
+      "description": "Multiple {@link MonitorConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.MonitorConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.accepts",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.accesslog",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.buffer",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.charset",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.client",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.codec",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.contextpath",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.dispatcher",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "deprecated": true,
+      "name": "dubbo.protocol.dispather",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.exchanger",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.heartbeat",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.host",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.iothreads",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.networker",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "deprecated": true,
+      "name": "dubbo.protocol.path",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.payload",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.port",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.prompt",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.queues",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.register",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.serialization",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.server",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.status",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.telnet",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.threadpool",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.threads",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProtocolConfig",
+      "name": "dubbo.protocol.transporter",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.protocols",
+      "description": "Multiple {@link ProtocolConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.ProtocolConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.accepts",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.accesslog",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.actives",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.application",
+      "type": "org.apache.dubbo.config.ApplicationConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.async",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.buffer",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.cache",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.callbacks",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.charset",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.client",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.cluster",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.codec",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.connections",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.contextpath",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "deprecated": true,
+      "name": "dubbo.provider.default",
+      "type": "java.lang.Boolean",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.delay",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.deprecated",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.dispatcher",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "deprecated": true,
+      "name": "dubbo.provider.dispather",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.document",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.dynamic",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.exchanger",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.executes",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.export",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.filter",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.group",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.host",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.iothreads",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.layer",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.listener",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.loadbalance",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "deprecated": true,
+      "name": "dubbo.provider.local",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.merger",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.mock",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.module",
+      "type": "org.apache.dubbo.config.ModuleConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.monitor",
+      "type": "org.apache.dubbo.config.MonitorConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.networker",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.onconnect",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.ondisconnect",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.owner",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "deprecated": true,
+      "name": "dubbo.provider.path",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.payload",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "deprecated": true,
+      "name": "dubbo.provider.port",
+      "type": "java.lang.Integer",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.prompt",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.protocol",
+      "type": "org.apache.dubbo.config.ProtocolConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.protocols",
+      "type": "java.util.List<org.apache.dubbo.config.ProtocolConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.proxy",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.queues",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.register",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.registries",
+      "type": "java.util.List<org.apache.dubbo.config.RegistryConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.registry",
+      "type": "org.apache.dubbo.config.RegistryConfig"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.retries",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.scope",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.sent",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.serialization",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.server",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.status",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.stub",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.telnet",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.threadpool",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.threads",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.timeout",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.token",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.transporter",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.validation",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.wait",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.warmup",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.ProviderConfig",
+      "name": "dubbo.provider.weight",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.providers",
+      "description": "Multiple {@link ProviderConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.ProviderConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.MultipleDubboConfigBindingProperties",
+      "name": "dubbo.registries",
+      "description": "Multiple {@link RegistryConfig} property",
+      "type": "java.util.Map<java.lang.String,org.apache.dubbo.config.RegistryConfig>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.address",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.check",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.client",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.cluster",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.default",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.dynamic",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.file",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.group",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.parameters",
+      "type": "java.util.Map<java.lang.String,java.lang.String>"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.password",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.port",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.protocol",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.register",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.server",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.session",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.subscribe",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.timeout",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "deprecated": true,
+      "name": "dubbo.registry.transport",
+      "type": "java.lang.String",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.transporter",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.username",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "name": "dubbo.registry.version",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "org.apache.dubbo.config.RegistryConfig",
+      "deprecated": true,
+      "name": "dubbo.registry.wait",
+      "type": "java.lang.Integer",
+      "deprecation": {}
+    },
+    {
+      "sourceType": "org.apache.dubbo.spring.boot.autoconfigure.DubboScanProperties",
+      "name": "dubbo.scan.base-packages",
+      "description": "The base-packages to scan , the multiple-value is delimited by comma\n\n @see EnableDubbo#scanBasePackages()",
+      "type": "java.util.Set<java.lang.String>"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring.factories b/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..08db894
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,9 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration,\
+org.apache.dubbo.spring.boot.autoconfigure.DubboRelaxedBindingAutoConfiguration
+org.springframework.context.ApplicationListener=\
+org.apache.dubbo.spring.boot.context.event.OverrideDubboConfigApplicationListener,\
+org.apache.dubbo.spring.boot.context.event.WelcomeLogoApplicationListener,\
+org.apache.dubbo.spring.boot.context.event.AwaitingNonWebApplicationListener
+org.springframework.boot.env.EnvironmentPostProcessor=\
+org.apache.dubbo.spring.boot.env.DubboDefaultPropertiesEnvironmentPostProcessor
\ No newline at end of file
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTest.java
new file mode 100644
index 0000000..cd574e0
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * {@link DubboAutoConfiguration} Test
+ *
+ * @see DubboAutoConfiguration
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {
+        CompatibleDubboAutoConfigurationTest.class
+}, properties = {
+        "dubbo.scan.base-packages = org.apache.dubbo.spring.boot.autoconfigure"
+})
+@EnableAutoConfiguration
+public class CompatibleDubboAutoConfigurationTest {
+
+    @Autowired
+    private ObjectProvider<ServiceAnnotationBeanPostProcessor> serviceAnnotationBeanPostProcessor;
+
+    @Autowired
+    private ObjectProvider<ReferenceAnnotationBeanPostProcessor> referenceAnnotationBeanPostProcessor;
+
+    @Test
+    public void testBeans() {
+        Assert.assertNotNull(serviceAnnotationBeanPostProcessor);
+        Assert.assertNotNull(serviceAnnotationBeanPostProcessor.getIfAvailable());
+        Assert.assertNotNull(referenceAnnotationBeanPostProcessor);
+        Assert.assertNotNull(referenceAnnotationBeanPostProcessor.getIfAvailable());
+    }
+}
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTestWithoutProperties.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTestWithoutProperties.java
new file mode 100644
index 0000000..06a21d8
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/CompatibleDubboAutoConfigurationTestWithoutProperties.java
@@ -0,0 +1,50 @@
+/*
+ * 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.dubbo.spring.boot.autoconfigure;
+
+import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * {@link DubboAutoConfiguration} Test
+ *
+ * @see DubboAutoConfiguration
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = CompatibleDubboAutoConfigurationTestWithoutProperties.class)
+@EnableAutoConfiguration
+public class CompatibleDubboAutoConfigurationTestWithoutProperties {
+
+    @Autowired(required = false)
+    private ServiceAnnotationBeanPostProcessor serviceAnnotationBeanPostProcessor;
+
+    @Autowired
+    private ReferenceAnnotationBeanPostProcessor referenceAnnotationBeanPostProcessor;
+
+    @Test
+    public void testBeans() {
+        Assert.assertNull(serviceAnnotationBeanPostProcessor);
+        Assert.assertNotNull(referenceAnnotationBeanPostProcessor);
+    }
+}
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java
similarity index 96%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java
index 5a6d737..1addb5e 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnMultipleConfigTest.java
@@ -23,17 +23,17 @@
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.RegistryConfig;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
 import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -43,9 +43,9 @@
 /**
  * {@link DubboAutoConfiguration} Test On multiple Dubbo Configuration
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @TestPropertySource(
         properties = {
                 "dubbo.applications.application1.NAME = dubbo-demo-application",
@@ -62,8 +62,11 @@
         }
 )
 @SpringBootTest(
-        classes = {DubboAutoConfiguration.class}
+        classes = {
+                DubboAutoConfigurationOnMultipleConfigTest.class
+        }
 )
+@EnableAutoConfiguration
 public class DubboAutoConfigurationOnMultipleConfigTest {
 
     @Autowired
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java
similarity index 87%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java
index 6f93ad0..28d1e6d 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/DubboAutoConfigurationOnSingleConfigTest.java
@@ -23,25 +23,23 @@
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
-import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
 import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * {@link DubboAutoConfiguration} Test On single Dubbo Configuration
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @TestPropertySource(
         properties = {
                 "dubbo.application.name = dubbo-demo-application",
@@ -55,8 +53,9 @@
         }
 )
 @SpringBootTest(
-        classes = {DubboAutoConfiguration.class}
+        classes = {DubboAutoConfigurationOnSingleConfigTest.class}
 )
+@EnableAutoConfiguration
 public class DubboAutoConfigurationOnSingleConfigTest {
 
     @Autowired
@@ -92,12 +91,6 @@
     @Autowired
     private ApplicationContext applicationContext;
 
-    @Autowired(required = false)
-    private ServiceAnnotationBeanPostProcessor serviceAnnotationBeanPostProcessor;
-
-    @Autowired
-    private ReferenceAnnotationBeanPostProcessor referenceAnnotationBeanPostProcessor;
-
     @Test
     public void testApplicationConfig() {
 
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
similarity index 85%
copy from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
copy to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
index fa91c09..817f035 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/autoconfigure/RelaxedDubboConfigBinderTest.java
@@ -19,7 +19,7 @@
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.RegistryConfig;
-
+import org.apache.dubbo.config.spring.context.properties.DubboConfigBinder;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -30,16 +30,20 @@
 
 /**
  * {@link RelaxedDubboConfigBinder} Test
- *
- * @since 0.1.1
  */
 @RunWith(SpringRunner.class)
-@TestPropertySource(locations = "classpath:/dubbo.properties")
+@TestPropertySource(properties = {
+        "dubbo.application.NAME=hello",
+        "dubbo.application.owneR=world",
+        "dubbo.registry.Address=10.20.153.17",
+        "dubbo.protocol.pORt=20881",
+        "dubbo.service.invoke.timeout=2000",
+})
 @ContextConfiguration(classes = RelaxedDubboConfigBinder.class)
 public class RelaxedDubboConfigBinderTest {
 
     @Autowired
-    private RelaxedDubboConfigBinder dubboConfigBinder;
+    private DubboConfigBinder dubboConfigBinder;
 
     @Test
     public void testBinder() {
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListenerTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListenerTest.java
new file mode 100644
index 0000000..8de2cae
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/AwaitingNonWebApplicationListenerTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.dubbo.spring.boot.context.event;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * {@link AwaitingNonWebApplicationListener} Test
+ */
+public class AwaitingNonWebApplicationListenerTest {
+
+    @Test
+    public void init() {
+        AtomicBoolean awaited = AwaitingNonWebApplicationListener.getAwaited();
+        awaited.set(false);
+
+    }
+
+    @Test
+    public void testSingleContextNonWebApplication() {
+        new SpringApplicationBuilder(Object.class)
+                .web(false)
+                .run().close();
+        AtomicBoolean awaited = AwaitingNonWebApplicationListener.getAwaited();
+        Assert.assertTrue(awaited.get());
+    }
+
+    @Test
+    public void testMultipleContextNonWebApplication() {
+        new SpringApplicationBuilder(Object.class)
+                .parent(Object.class)
+                .web(false)
+                .run().close();
+        AtomicBoolean awaited = AwaitingNonWebApplicationListener.getAwaited();
+        Assert.assertTrue(awaited.get());
+    }
+
+}
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java
similarity index 93%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java
index 3fff621..4bea84c 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerDisableTest.java
@@ -17,14 +17,13 @@
 package org.apache.dubbo.spring.boot.context.event;
 
 import org.apache.dubbo.common.utils.ConfigUtils;
-
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.Properties;
 
@@ -32,9 +31,9 @@
  * {@link OverrideDubboConfigApplicationListener} Test
  *
  * @see OverrideDubboConfigApplicationListener
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @TestPropertySource(
         properties = {
                 "dubbo.config.override = false",
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java
similarity index 94%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java
index 8e81161..5e42561 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/OverrideDubboConfigApplicationListenerTest.java
@@ -17,14 +17,13 @@
 package org.apache.dubbo.spring.boot.context.event;
 
 import org.apache.dubbo.common.utils.ConfigUtils;
-
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.Properties;
 
@@ -32,9 +31,9 @@
  * {@link OverrideDubboConfigApplicationListener} Test
  *
  * @see OverrideDubboConfigApplicationListener
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @TestPropertySource(
         properties = {
                 "dubbo.application.name = dubbo-demo-application",
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java
similarity index 92%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java
index be9d2a3..c006a75 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/context/event/WelcomeLogoApplicationListenerTest.java
@@ -21,15 +21,15 @@
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * {@link WelcomeLogoApplicationListener} Test
  *
  * @see WelcomeLogoApplicationListener
- * @since 1.0.0
+ * @since 2.7.0
  */
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @SpringBootTest(
         classes = {WelcomeLogoApplicationListener.class}
 )
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessorTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessorTest.java
new file mode 100644
index 0000000..2fbb6aa
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/env/DubboDefaultPropertiesEnvironmentPostProcessorTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.dubbo.spring.boot.env;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.boot.SpringApplication;
+import org.springframework.core.Ordered;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.PropertySource;
+import org.springframework.mock.env.MockEnvironment;
+
+import java.util.HashMap;
+
+/**
+ * {@link DubboDefaultPropertiesEnvironmentPostProcessor} Test
+ */
+public class DubboDefaultPropertiesEnvironmentPostProcessorTest {
+
+    private DubboDefaultPropertiesEnvironmentPostProcessor instance =
+            new DubboDefaultPropertiesEnvironmentPostProcessor();
+
+    private SpringApplication springApplication = new SpringApplication();
+
+    @Test
+    public void testOrder() {
+        Assert.assertEquals(Ordered.LOWEST_PRECEDENCE, instance.getOrder());
+    }
+
+    @Test
+    public void testPostProcessEnvironment() {
+        MockEnvironment environment = new MockEnvironment();
+        // Case 1 : Not Any property
+        instance.postProcessEnvironment(environment, springApplication);
+        // Get PropertySources
+        MutablePropertySources propertySources = environment.getPropertySources();
+        // Nothing to change
+        PropertySource defaultPropertySource = propertySources.get("defaultProperties");
+        Assert.assertNotNull(defaultPropertySource);
+        Assert.assertEquals("true", defaultPropertySource.getProperty("dubbo.config.multiple"));
+        Assert.assertEquals("false", defaultPropertySource.getProperty("dubbo.application.qos-enable"));
+
+        // Case 2 :  Only set property "spring.application.name"
+        environment.setProperty("spring.application.name", "demo-dubbo-application");
+        instance.postProcessEnvironment(environment, springApplication);
+        defaultPropertySource = propertySources.get("defaultProperties");
+        Object dubboApplicationName = defaultPropertySource.getProperty("dubbo.application.name");
+        Assert.assertEquals("demo-dubbo-application", dubboApplicationName);
+
+        // Case 3 : Only set property "dubbo.application.name"
+        // Rest environment
+        environment = new MockEnvironment();
+        propertySources = environment.getPropertySources();
+        environment.setProperty("dubbo.application.name", "demo-dubbo-application");
+        instance.postProcessEnvironment(environment, springApplication);
+        defaultPropertySource = propertySources.get("defaultProperties");
+        Assert.assertNotNull(defaultPropertySource);
+        dubboApplicationName = environment.getProperty("dubbo.application.name");
+        Assert.assertEquals("demo-dubbo-application", dubboApplicationName);
+
+        // Case 4 : If "defaultProperties" PropertySource is present in PropertySources
+        // Rest environment
+        environment = new MockEnvironment();
+        propertySources = environment.getPropertySources();
+        propertySources.addLast(new MapPropertySource("defaultProperties", new HashMap<String, Object>()));
+        environment.setProperty("spring.application.name", "demo-dubbo-application");
+        instance.postProcessEnvironment(environment, springApplication);
+        defaultPropertySource = propertySources.get("defaultProperties");
+        dubboApplicationName = defaultPropertySource.getProperty("dubbo.application.name");
+        Assert.assertEquals("demo-dubbo-application", dubboApplicationName);
+
+        // Case 5 : Rest dubbo.config.multiple and dubbo.application.qos-enable
+        environment = new MockEnvironment();
+        propertySources = environment.getPropertySources();
+        propertySources.addLast(new MapPropertySource("defaultProperties", new HashMap<String, Object>()));
+        environment.setProperty("dubbo.config.multiple", "false");
+        environment.setProperty("dubbo.application.qos-enable", "true");
+        instance.postProcessEnvironment(environment, springApplication);
+        Assert.assertEquals("false", environment.getProperty("dubbo.config.multiple"));
+        Assert.assertEquals("true", environment.getProperty("dubbo.application.qos-enable"));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java
similarity index 82%
rename from dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java
rename to dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java
index 910cb7c..7242b58 100644
--- a/dubbo-spring-boot-autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/DubboUtilsTest.java
@@ -34,14 +34,14 @@
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SPRING_BOOT_GIT_URL;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SPRING_BOOT_ISSUES_URL;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.MULTIPLE_CONFIG_PROPERTY_NAME;
-import static org.apache.dubbo.spring.boot.util.DubboUtils.OVERRIDE_CONFIG_PROPERTY_NAME;
+import static org.apache.dubbo.spring.boot.util.DubboUtils.OVERRIDE_CONFIG_FULL_PROPERTY_NAME;
 import static org.apache.dubbo.spring.boot.util.DubboUtils.filterDubboProperties;
 
 /**
  * {@link DubboUtils} Test
  *
  * @see DubboUtils
- * @since 1.0.0
+ * @since 2.7.0
  */
 public class DubboUtilsTest {
 
@@ -50,15 +50,15 @@
 
         Assert.assertEquals("dubbo", DUBBO_PREFIX);
 
-        Assert.assertEquals("dubbo.scan", DUBBO_SCAN_PREFIX);
+        Assert.assertEquals("dubbo.scan.", DUBBO_SCAN_PREFIX);
 
-        Assert.assertEquals("dubbo.scan.base-packages", BASE_PACKAGES_PROPERTY_NAME);
+        Assert.assertEquals("base-packages", BASE_PACKAGES_PROPERTY_NAME);
 
-        Assert.assertEquals("dubbo.config", DUBBO_CONFIG_PREFIX);
+        Assert.assertEquals("dubbo.config.", DUBBO_CONFIG_PREFIX);
 
-        Assert.assertEquals("dubbo.config.multiple", MULTIPLE_CONFIG_PROPERTY_NAME);
+        Assert.assertEquals("multiple", MULTIPLE_CONFIG_PROPERTY_NAME);
 
-        Assert.assertEquals("dubbo.config.override", OVERRIDE_CONFIG_PROPERTY_NAME);
+        Assert.assertEquals("dubbo.config.override", OVERRIDE_CONFIG_FULL_PROPERTY_NAME);
 
         Assert.assertEquals("https://github.com/apache/incubator-dubbo-spring-boot-project", DUBBO_SPRING_BOOT_GITHUB_URL);
         Assert.assertEquals("https://github.com/apache/incubator-dubbo-spring-boot-project.git", DUBBO_SPRING_BOOT_GIT_URL);
@@ -68,7 +68,7 @@
 
         Assert.assertEquals("dev@dubbo.apache.org", DUBBO_MAILING_LIST);
 
-        Assert.assertFalse(DEFAULT_MULTIPLE_CONFIG_PROPERTY_VALUE);
+        Assert.assertTrue(DEFAULT_MULTIPLE_CONFIG_PROPERTY_VALUE);
 
         Assert.assertTrue(DEFAULT_OVERRIDE_CONFIG_PROPERTY_VALUE);
 
@@ -80,13 +80,13 @@
 
         MockEnvironment environment = new MockEnvironment();
         environment.setProperty("message", "Hello,World");
-        environment.setProperty(MULTIPLE_CONFIG_PROPERTY_NAME, "true");
-        environment.setProperty(OVERRIDE_CONFIG_PROPERTY_NAME, "true");
+        environment.setProperty(DUBBO_CONFIG_PREFIX + MULTIPLE_CONFIG_PROPERTY_NAME, "true");
+        environment.setProperty(OVERRIDE_CONFIG_FULL_PROPERTY_NAME, "true");
 
         SortedMap<String, Object> dubboProperties = filterDubboProperties(environment);
 
-        Assert.assertEquals("true", dubboProperties.get(MULTIPLE_CONFIG_PROPERTY_NAME));
-        Assert.assertEquals("true", dubboProperties.get(OVERRIDE_CONFIG_PROPERTY_NAME));
+        Assert.assertEquals("true", dubboProperties.get(DUBBO_CONFIG_PREFIX + MULTIPLE_CONFIG_PROPERTY_NAME));
+        Assert.assertEquals("true", dubboProperties.get(OVERRIDE_CONFIG_FULL_PROPERTY_NAME));
 
     }
 
diff --git a/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java
new file mode 100644
index 0000000..2ca3766
--- /dev/null
+++ b/dubbo-spring-boot-compatible/autoconfigure/src/test/java/org/apache/dubbo/spring/boot/util/EnvironmentUtilsTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.dubbo.spring.boot.util;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.core.env.CompositePropertySource;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.StandardEnvironment;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * {@link EnvironmentUtils} Test
+ *
+ * @see EnvironmentUtils
+ * @since 2.7.0
+ */
+public class EnvironmentUtilsTest {
+
+    @Test
+    public void testExtraProperties() {
+
+        System.setProperty("user.name", "mercyblitz");
+
+        StandardEnvironment environment = new StandardEnvironment();
+
+        Map<String, Object> map = new HashMap<>();
+
+        map.put("user.name", "Mercy");
+
+        MapPropertySource propertySource = new MapPropertySource("first", map);
+
+        CompositePropertySource compositePropertySource = new CompositePropertySource("comp");
+
+        compositePropertySource.addFirstPropertySource(propertySource);
+
+        MutablePropertySources propertySources = environment.getPropertySources();
+
+        propertySources.addFirst(compositePropertySource);
+
+        Map<String, Object> properties = EnvironmentUtils.extractProperties(environment);
+
+        Assert.assertEquals("Mercy", properties.get("user.name"));
+
+    }
+}
diff --git a/dubbo-spring-boot-compatible/pom.xml b/dubbo-spring-boot-compatible/pom.xml
new file mode 100644
index 0000000..8af787e
--- /dev/null
+++ b/dubbo-spring-boot-compatible/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.apache.dubbo</groupId>
+        <artifactId>dubbo-spring-boot-parent</artifactId>
+        <version>${revision}</version>
+        <relativePath>../dubbo-spring-boot-parent/pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-spring-boot-compatible</artifactId>
+    <packaging>pom</packaging>
+    <name>Apache Dubbo Spring Boot :: Compatible</name>
+    <description>Apache Dubbo Spring Boot Compatible for Spring Boot 1.x</description>
+
+    <properties>
+        <spring-boot.version>1.5.19.RELEASE</spring-boot.version>
+    </properties>
+
+    <modules>
+        <module>autoconfigure</module>
+        <module>actuator</module>
+    </modules>
+
+</project>
\ No newline at end of file
diff --git a/dubbo-spring-boot-distribution/pom.xml b/dubbo-spring-boot-distribution/pom.xml
index 38f4a19..181ba44 100644
--- a/dubbo-spring-boot-distribution/pom.xml
+++ b/dubbo-spring-boot-distribution/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -13,7 +14,7 @@
   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.
--->
+  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -27,7 +28,7 @@
 
     <artifactId>dubbo-spring-boot-distribution</artifactId>
     <packaging>pom</packaging>
-    <name>Apache Dubbo Spring Boot Distribution</name>
+    <name>Apache Dubbo Spring Boot :: Distribution</name>
     <description>Apache Dubbo Spring Boot Distribution</description>
 
 
diff --git a/dubbo-spring-boot-parent/pom.xml b/dubbo-spring-boot-parent/pom.xml
index e1db10f..9d7b1e8 100644
--- a/dubbo-spring-boot-parent/pom.xml
+++ b/dubbo-spring-boot-parent/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -28,7 +29,7 @@
 
     <artifactId>dubbo-spring-boot-parent</artifactId>
     <packaging>pom</packaging>
-    <name>Apache Dubbo Spring Boot Parent</name>
+    <name>Apache Dubbo Spring Boot :: Parent</name>
     <description>Apache Dubbo Spring Boot Parent</description>
 
     <properties>
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/pom.xml b/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/pom.xml
index 304dddb..4f01fe1 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/pom.xml
+++ b/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-auto-configure-consumer-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Auto-Configure :: Consumer Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Auto-Configure :: Consumer Sample</name>
     <dependencies>
 
         <!-- Spring Boot dependencies -->
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboAutoConfigurationConsumerBootstrap.java b/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboAutoConfigurationConsumerBootstrap.java
index a76da3d..5b2ac82 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboAutoConfigurationConsumerBootstrap.java
+++ b/dubbo-spring-boot-samples/auto-configure-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboAutoConfigurationConsumerBootstrap.java
@@ -18,7 +18,6 @@
 
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.spring.boot.demo.consumer.DemoService;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.ApplicationRunner;
@@ -29,7 +28,7 @@
 /**
  * Dubbo Auto Configuration Consumer Bootstrap
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
 @EnableAutoConfiguration
 public class DubboAutoConfigurationConsumerBootstrap {
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/pom.xml b/dubbo-spring-boot-samples/auto-configure-samples/pom.xml
index 51d8661..3df5bf5 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/pom.xml
+++ b/dubbo-spring-boot-samples/auto-configure-samples/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-auto-configure-samples</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Auto-Configure</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Auto-Configure</name>
     <description>Apache Dubbo Spring Boot Auto-Configure Samples</description>
     <packaging>pom</packaging>
 
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/pom.xml b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/pom.xml
index 048ccb0..a7aca3a 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/pom.xml
+++ b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-auto-configure-provider-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Auto-Configure :: Provider Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Auto-Configure :: Provider Sample</name>
 
     <dependencies>
 
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboAutoConfigurationProviderBootstrap.java b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboAutoConfigurationProviderBootstrap.java
index 949f5ce..bd61706 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboAutoConfigurationProviderBootstrap.java
+++ b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboAutoConfigurationProviderBootstrap.java
@@ -17,8 +17,6 @@
 package org.apache.dubbo.spring.boot.demo.provider.bootstrap;
 
 import org.apache.dubbo.spring.boot.demo.provider.service.DefaultDemoService;
-
-import org.springframework.boot.WebApplicationType;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 
@@ -26,14 +24,13 @@
  * Dubbo Auto-Configuration Provider Bootstrap
  *
  * @see DefaultDemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @EnableAutoConfiguration
 public class DubboAutoConfigurationProviderBootstrap {
 
     public static void main(String[] args) {
         new SpringApplicationBuilder(DubboAutoConfigurationProviderBootstrap.class)
-                .web(WebApplicationType.NONE)
                 .run(args);
     }
 }
diff --git a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
index 257bee6..61195ac 100644
--- a/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
+++ b/dubbo-spring-boot-samples/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
@@ -18,14 +18,13 @@
 
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.spring.boot.demo.consumer.DemoService;
-
 import org.springframework.beans.factory.annotation.Value;
 
 /**
  * Default {@link DemoService}
  *
  * @see DemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Service(version = "1.0.0")
 public class DefaultDemoService implements DemoService {
diff --git a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/consumer-sample/pom.xml b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/consumer-sample/pom.xml
index c80eaf8..1941193 100644
--- a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/consumer-sample/pom.xml
+++ b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/consumer-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-registry-zookeeper-consumer-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Registry Zookeeper :: Consumer Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Registry Zookeeper :: Consumer Sample</name>
     <dependencies>
 
         <!-- Spring Boot dependencies -->
diff --git a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/pom.xml b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/pom.xml
index b0b46fe..741dce9 100644
--- a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/pom.xml
+++ b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-registry-zookeeper-samples</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Registry Zookeeper</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Registry Zookeeper</name>
     <description>Apache Dubbo Spring Boot Registry Zookeeper Samples</description>
     <packaging>pom</packaging>
 
diff --git a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/pom.xml b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/pom.xml
index 810def9..c41c446 100644
--- a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/pom.xml
+++ b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-registry-zookeeper-provider-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Registry Zookeeper :: Provider Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Registry Zookeeper :: Provider Sample</name>
 
     <dependencies>
 
diff --git a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboRegistryZooKeeperProviderBootstrap.java b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboRegistryZooKeeperProviderBootstrap.java
index a2f1eaa..5f20c85 100644
--- a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboRegistryZooKeeperProviderBootstrap.java
+++ b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboRegistryZooKeeperProviderBootstrap.java
@@ -17,8 +17,6 @@
 package org.apache.dubbo.spring.boot.demo.provider.bootstrap;
 
 import org.apache.dubbo.spring.boot.demo.provider.service.DefaultDemoService;
-
-import org.springframework.boot.WebApplicationType;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
@@ -29,14 +27,13 @@
  * Dubbo Registry ZooKeeper Provider Bootstrap
  *
  * @see DefaultDemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @EnableAutoConfiguration
 public class DubboRegistryZooKeeperProviderBootstrap {
 
     public static void main(String[] args) {
         new SpringApplicationBuilder(DubboRegistryZooKeeperProviderBootstrap.class)
-                .web(WebApplicationType.NONE)
                 .listeners((ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> {
                     Environment environment = event.getEnvironment();
                     int port = environment.getProperty("embedded.zookeeper.port", int.class);
diff --git a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
index 1e4c18b..6ff5f7a 100644
--- a/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
+++ b/dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
@@ -18,14 +18,13 @@
 
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.spring.boot.demo.consumer.DemoService;
-
 import org.springframework.beans.factory.annotation.Value;
 
 /**
  * Default {@link DemoService}
  *
  * @see DemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Service(version = "${demo.service.version}")
 public class DefaultDemoService implements DemoService {
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/pom.xml b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/pom.xml
index 6804c6b..893dd4b 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/pom.xml
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,18 +27,30 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-externalized-configuration-consumer-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Externalized Configuration :: Consumer Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Externalized Configuration :: Consumer Sample</name>
     <dependencies>
 
         <!-- Spring Boot dependencies -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+        <!-- Dubbo Spring Boot dependencies -->
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-starter</artifactId>
+            <version>${revision}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-spring-boot-starter</artifactId>
+            <artifactId>dubbo-spring-boot-actuator</artifactId>
             <version>${revision}</version>
         </dependency>
 
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboExternalizedConfigurationConsumerBootstrap.java b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboExternalizedConfigurationConsumerBootstrap.java
index 835bfac..f36ec2b 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboExternalizedConfigurationConsumerBootstrap.java
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/bootstrap/DubboExternalizedConfigurationConsumerBootstrap.java
@@ -18,18 +18,21 @@
 
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.spring.boot.demo.consumer.DemoService;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.context.annotation.Bean;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * Dubbo Externalized Configuration Consumer Bootstrap
  */
 @EnableAutoConfiguration
+@RestController
 public class DubboExternalizedConfigurationConsumerBootstrap {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -38,7 +41,12 @@
     private DemoService demoService;
 
     public static void main(String[] args) {
-        SpringApplication.run(DubboExternalizedConfigurationConsumerBootstrap.class).close();
+        SpringApplication.run(DubboExternalizedConfigurationConsumerBootstrap.class);
+    }
+
+    @GetMapping("/say-hello")
+    public String sayHello(@RequestParam String name) {
+        return demoService.sayHello(name);
     }
 
     @Bean
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/resources/application.yml b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/resources/application.yml
index e3aef42..3f98bc1 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/resources/application.yml
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/consumer-sample/src/main/resources/application.yml
@@ -2,6 +2,44 @@
   application:
     name: dubbo-externalized-configuration-consumer-sample
 
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    dubbo:
+      enabled: true
+    dubboshutdown:
+      enabled: true
+    dubboconfigs:
+      enabled: true
+    dubboservices:
+      enabled: true
+    dubboreferences:
+      enabled: true
+    dubboproperties:
+      enabled: true
+  security:
+    ## Deprecated 2.x
+    enabled: false
+
+## For Spring Boot 1.x demo
+endpoints:
+  dubbo:
+    enabled: true
+    sensitive: false
+  dubboshutdown:
+    enabled: true
+  dubboconfigs:
+    enabled: true
+  dubboservices:
+    enabled: true
+  dubboreferences:
+    enabled: true
+  dubboproperties:
+    enabled: true
+
 demo:
   service:
     version: 1.0.0
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/pom.xml b/dubbo-spring-boot-samples/externalized-configuration-samples/pom.xml
index 75a4810..86e26ad 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/pom.xml
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-externalized-configuration-samples</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Externalized Configuration</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Externalized Configuration</name>
     <description>Apache Dubbo Spring Boot Externalized Configuration Samples</description>
     <packaging>pom</packaging>
 
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/pom.xml b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/pom.xml
index c9c9e01..47a2bb1 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/pom.xml
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,7 +27,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-externalized-configuration-provider-sample</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : Externalized Configuration :: Provider Sample</name>
+    <name>Apache Dubbo Spring Boot :: Samples : Externalized Configuration :: Provider Sample</name>
 
     <dependencies>
 
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboExternalizedConfigurationProviderBootstrap.java b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboExternalizedConfigurationProviderBootstrap.java
index 657dddd..2671f75 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboExternalizedConfigurationProviderBootstrap.java
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/bootstrap/DubboExternalizedConfigurationProviderBootstrap.java
@@ -17,8 +17,6 @@
 package org.apache.dubbo.spring.boot.demo.provider.bootstrap;
 
 import org.apache.dubbo.spring.boot.demo.provider.service.DefaultDemoService;
-
-import org.springframework.boot.WebApplicationType;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 
@@ -26,14 +24,13 @@
  * Dubbo Externalized Configuration Provider Bootstrap
  *
  * @see DefaultDemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @EnableAutoConfiguration
 public class DubboExternalizedConfigurationProviderBootstrap {
 
     public static void main(String[] args) {
         new SpringApplicationBuilder(DubboExternalizedConfigurationProviderBootstrap.class)
-                .web(WebApplicationType.NONE)
                 .run(args);
     }
 }
diff --git a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
index 1e4c18b..6ff5f7a 100644
--- a/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
+++ b/dubbo-spring-boot-samples/externalized-configuration-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java
@@ -18,14 +18,13 @@
 
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.spring.boot.demo.consumer.DemoService;
-
 import org.springframework.beans.factory.annotation.Value;
 
 /**
  * Default {@link DemoService}
  *
  * @see DemoService
- * @since 1.0.0
+ * @since 2.7.0
  */
 @Service(version = "${demo.service.version}")
 public class DefaultDemoService implements DemoService {
diff --git a/dubbo-spring-boot-samples/pom.xml b/dubbo-spring-boot-samples/pom.xml
index 33d018f..450f328 100644
--- a/dubbo-spring-boot-samples/pom.xml
+++ b/dubbo-spring-boot-samples/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -28,8 +29,8 @@
     <groupId>org.apache.dubbo.samples</groupId>
     <artifactId>dubbo-spring-boot-samples</artifactId>
     <packaging>pom</packaging>
-    <name>Apache Dubbo Spring Boot Samples</name>
-    <description>Apache Dubbo Spring Boot Samples</description>
+    <name>Apache Dubbo Spring Boot :: Samples</name>
+    <description>Apache Dubbo Spring Boot :: Samples</description>
 
     <modules>
         <module>sample-api</module>
diff --git a/dubbo-spring-boot-samples/sample-api/pom.xml b/dubbo-spring-boot-samples/sample-api/pom.xml
index bf3cfd1..25964a5 100644
--- a/dubbo-spring-boot-samples/sample-api/pom.xml
+++ b/dubbo-spring-boot-samples/sample-api/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -26,6 +27,6 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-spring-boot-sample-api</artifactId>
-    <name>Apache Dubbo Spring Boot Samples : API</name>
+    <name>Apache Dubbo Spring Boot :: Samples : API</name>
 
 </project>
\ No newline at end of file
diff --git a/dubbo-spring-boot-samples/sample-api/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/DemoService.java b/dubbo-spring-boot-samples/sample-api/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/DemoService.java
index 0ec07f2..905e94e 100644
--- a/dubbo-spring-boot-samples/sample-api/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/DemoService.java
+++ b/dubbo-spring-boot-samples/sample-api/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/DemoService.java
@@ -19,7 +19,7 @@
 /**
  * Demo Service interface
  *
- * @since 1.0.0
+ * @since 2.7.0
  */
 public interface DemoService {
 
diff --git a/dubbo-spring-boot-starter/pom.xml b/dubbo-spring-boot-starter/pom.xml
index ac2576d..d71a846 100644
--- a/dubbo-spring-boot-starter/pom.xml
+++ b/dubbo-spring-boot-starter/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -27,7 +28,7 @@
 
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <packaging>jar</packaging>
-    <name>Apache Dubbo Spring Boot Starter</name>
+    <name>Apache Dubbo Spring Boot :: Starter</name>
     <description>Apache Dubbo Spring Boot Starter</description>
 
 
@@ -39,19 +40,6 @@
             <optional>true</optional>
         </dependency>
 
-        <!-- ZK -->
-        <dependency>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.curator</groupId>
-            <artifactId>curator-framework</artifactId>
-            <optional>true</optional>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
diff --git a/pom.xml b/pom.xml
index 9b52dd1..ffefee6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -45,8 +46,9 @@
         <module>dubbo-spring-boot-distribution</module>
         <module>dubbo-spring-boot-autoconfigure</module>
         <module>dubbo-spring-boot-starter</module>
-        <module>dubbo-spring-boot-samples</module>
         <module>dubbo-spring-boot-actuator</module>
+        <module>dubbo-spring-boot-compatible</module>
+        <module>dubbo-spring-boot-samples</module>
     </modules>
 
     <organization>
