diff --git a/README.md b/README.md
index 529dd9c..f393438 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 ```xml
 <properties>
     <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
-    <dubbo.version>2.7.0-SNAPSHT</dubbo.version>
+    <dubbo.version>2.7.0</dubbo.version>
 </properties>
     
 <dependencyManagement>
@@ -72,11 +72,11 @@
     <dependency>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-spring-boot-starter</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
+        <version>2.7.0</version>
     </dependency>
     
     <dependency>
-        <groupId>com.alibaba</groupId>
+        <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo</artifactId>
     </dependency>
 </dependencies>
@@ -137,13 +137,13 @@
     ```java
     @Service(version = "1.0.0")
     public class DefaultDemoService implements DemoService {
-
+    
         /**
-        * The default value of ${dubbo.application.name} is ${spring.application.name}
-        */
+         * The default value of ${dubbo.application.name} is ${spring.application.name}
+         */
         @Value("${dubbo.application.name}")
         private String serviceName;
-
+    
         public String sayHello(String name) {
             return String.format("[%s] : Hello, %s", serviceName, name);
         }
@@ -167,7 +167,6 @@
     ```properties
     # Spring boot application
     spring.application.name=dubbo-auto-configuration-provider-demo
-
     # Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
     dubbo.scan.base-packages=org.apache.dubbo.spring.boot.demo.provider.service
 
@@ -191,44 +190,32 @@
 
     ```java
     @EnableAutoConfiguration
-    public class DubboConsumerBootstrap {
-
+    public class DubboAutoConfigurationConsumerBootstrap {
+    
         private final Logger logger = LoggerFactory.getLogger(getClass());
-
-        @Reference(version = "1.0.0", url = "dubbo://localhost:12345")
+    
+        @Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
         private DemoService demoService;
-
+    
+        public static void main(String[] args) {
+            SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close();
+        }
+    
         @Bean
         public ApplicationRunner runner() {
             return args -> {
                 logger.info(demoService.sayHello("mercyblitz"));
             };
         }
-
-        public static void main(String[] args) {
-            SpringApplication.run(DubboConsumerBootstrap.class).close();
-        }
     }
     ```
 
-2. configures `application.properties`
+2. configures `application.yml`
 
-    ```properties
-    # Spring boot application
-    spring.application.name = dubbo-consumer-demo
-    server.port = 8080
-    management.port = 8081
-
-
-    # Dubbo Config properties
-    ## ApplicationConfig Bean
-    dubbo.application.id = dubbo-consumer-demo
-    dubbo.application.name = dubbo-consumer-demo
-
-    ## ProtocolConfig Bean
-    dubbo.protocol.id = dubbo
-    dubbo.protocol.name = dubbo
-    dubbo.protocol.port = 12345
+    ```yaml
+    spring:
+      application:
+        name: dubbo-auto-configure-consumer-sample
     ```
 
 If `DubboProviderDemo` works well, please mark sure `DubboProviderDemo` is started.
@@ -242,7 +229,7 @@
 Having trouble with Dubbo Spring Boot? We’d like to help!
 
 - If you are upgrading, read the [release notes](https://github.com/dubbo/dubbo-spring-boot-project/releases) for upgrade instructions and "new and noteworthy" features.
-- Ask a question - You can join [ours google groups](https://groups.google.com/group/dubbo), or subscribe [Dubbo User Mailling List](mailto:dubbo+subscribe@googlegroups.com).
+- Ask a question - You can subscribe [Dubbo User Mailling List](mailto:dubbo+subscribe@googlegroups.com).
 - Report bugs at [github.com/dubbo/dubbo-spring-boot-project/issues](https://github.com/dubbo/dubbo-spring-boot-project/issues).
 
 
@@ -295,5 +282,3 @@
 - [Auto-Configuaration Samples](dubbo-spring-boot-samples/auto-configure-samples)
 - [Externalized Configuration Samples](dubbo-spring-boot-samples/externalized-configuration-samples)
 - [Registry Zookeeper Samples](dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples)
-- [Registry Nacos Samples](dubbo-spring-boot-samples/dubbo-registry-nacos-samples)
-- [Sample API](dubbo-spring-boot-samples/sample-api)
\ No newline at end of file
diff --git a/README_CN.md b/README_CN.md
index 467037b..3912038 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -25,7 +25,7 @@
 ```xml
 <properties>
     <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
-    <dubbo.version>2.7.0-SNAPSHT</dubbo.version>
+    <dubbo.version>2.7.0</dubbo.version>
 </properties>
     
 <dependencyManagement>
@@ -75,11 +75,11 @@
     <dependency>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-spring-boot-starter</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
+        <version>2.7.0</version>
     </dependency>
     
     <dependency>
-        <groupId>com.alibaba</groupId>
+        <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo</artifactId>
     </dependency>
 </dependencies>
@@ -137,72 +137,57 @@
 
 1. 实现 `DemoService` 接口
 
-```java
-@Service(
-        version = "${demo.service.version}",
-        application = "${dubbo.application.id}",
-        protocol = "${dubbo.protocol.id}",
-        registry = "${dubbo.registry.id}"
-)
-public class DefaultDemoService implements DemoService {
-
-    public String sayHello(String name) {
-        return "Hello, " + name + " (from Spring Boot)";
+    ```java
+    @Service(version = "1.0.0")
+    public class DefaultDemoService implements DemoService {
+    
+        /**
+         * The default value of ${dubbo.application.name} is ${spring.application.name}
+         */
+        @Value("${dubbo.application.name}")
+        private String serviceName;
+    
+        public String sayHello(String name) {
+            return String.format("[%s] : Hello, %s", serviceName, name);
+        }
     }
-
-}
-```
+    ```
 
 
 
 2. 编写 Spring Boot 引导程序
 
-```java
-@SpringBootApplication
-public class DubboProviderDemo {
+    ```java
+    @EnableAutoConfiguration
+    public class DubboProviderDemo {
 
-    public static void main(String[] args) {
-
-        new SpringApplicationBuilder(DubboProviderDemo.class)
-                .web(false) // 非 Web 应用
-                .run(args);
-
+        public static void main(String[] args) {
+            SpringApplication.run(DubboProviderDemo.class,args);
+        }
     }
-
-}
-```
+    ```
 
 
 3. 配置 `application.properties` :
 
-```properties
-# Spring boot application
-spring.application.name = dubbo-provider-demo
-server.port = 9090
-management.port = 9091
+    ```properties
+    # Spring boot application
+    spring.application.name=dubbo-auto-configuration-provider-demo
+    # Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
+    dubbo.scan.base-packages=org.apache.dubbo.spring.boot.demo.provider.service
 
-# Service version
-demo.service.version = 1.0.0
+    # Dubbo Application
+    ## The default value of dubbo.application.name is ${spring.application.name}
+    ## dubbo.application.name=${spring.application.name}
 
-# Base packages to scan Dubbo Components (e.g @Service , @Reference)
-dubbo.scan.basePackages  = org.apache.dubbo.spring.boot.demo.provider.service
+    # Dubbo Protocol
+    dubbo.protocol.name=dubbo
+    dubbo.protocol.port=12345
 
-# Dubbo Config properties
-## ApplicationConfig Bean
-dubbo.application.id = dubbo-provider-demo
-dubbo.application.name = dubbo-provider-demo
+    ## Dubbo Registry
+    dubbo.registry.address=N/A
+    ```
 
-## ProtocolConfig Bean
-dubbo.protocol.id = dubbo
-dubbo.protocol.name = dubbo
-dubbo.protocol.port = 12345
-
-## RegistryConfig Bean
-dubbo.registry.id = my-registry
-dubbo.registry.address = N/A
-```
-
-更多的实现细节 , 请参考 [Dubbo 服务提供方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-provider).
 
 
 
@@ -211,69 +196,44 @@
 
 1. 通过 `@Reference` 注入 `DemoService` :
 
-```java
-@RestController
-public class DemoConsumerController {
-
-    @Reference(version = "${demo.service.version}",
-            application = "${dubbo.application.id}",
-            url = "dubbo://localhost:12345")
-    private DemoService demoService;
-
-    @RequestMapping("/sayHello")
-    public String sayHello(@RequestParam String name) {
-        return demoService.sayHello(name);
+    ```java
+    @EnableAutoConfiguration
+    public class DubboAutoConfigurationConsumerBootstrap {
+    
+        private final Logger logger = LoggerFactory.getLogger(getClass());
+    
+        @Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
+        private DemoService demoService;
+    
+        public static void main(String[] args) {
+            SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close();
+        }
+    
+        @Bean
+        public ApplicationRunner runner() {
+            return args -> {
+                logger.info(demoService.sayHello("mercyblitz"));
+            };
+        }
     }
-
-}
-```
+    ```
 
 
 
-2. 编写 Spring Boot 引导程序（Web 应用） :
+2. 配置 `application.yml` :
 
-```java
-@SpringBootApplication(scanBasePackages = "org.apache.dubbo.spring.boot.demo.consumer.controller")
-public class DubboConsumerDemo {
-
-    public static void main(String[] args) {
-
-        SpringApplication.run(DubboConsumerDemo.class,args);
-
-    }
-
-}
-```
-
-
-
-3. 配置 `application.properties` :
-
-```properties
-# Spring boot application
-spring.application.name = dubbo-consumer-demo
-server.port = 8080
-management.port = 8081
-
-# Service Version
-demo.service.version = 1.0.0
-
-# Dubbo Config properties
-## ApplicationConfig Bean
-dubbo.application.id = dubbo-consumer-demo
-dubbo.application.name = dubbo-consumer-demo
-
-## ProtocolConfig Bean
-dubbo.protocol.id = dubbo
-dubbo.protocol.name = dubbo
-dubbo.protocol.port = 12345
-```
+    ```yaml
+    spring:
+      application:
+        name: dubbo-auto-configure-consumer-sample
+    ```
 
 
 请确保 Dubbo 服务提供方服务可用， `DubboProviderDemo` 运行方可正常。
 
 
-更多的实现细节，请参考 [Dubbo 服务消费方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-consumer)
+更多的实现细节，请参考 [Dubbo 示例](dubbo-spring-boot-samples)
+
 
 
 
@@ -282,11 +242,12 @@
 如果您在使用 Dubbo Spring Boot 中遇到任何问题或者有什么建议? 我们非常需要您的支持!
 
 - 如果您需要升级版本，请提前阅读[发布公告](https://github.com/dubbo/dubbo-spring-boot-project/releases)，了解最新的特性和问题修复。
-- 如果您遇到任何问题 ，您可以加入官方 [Google 讨论组](https://groups.google.com/group/dubbo) , 或者订阅 [Dubbo 用户邮件列表](mailto:dubbo+subscribe@googlegroups.com)。
+- 如果您遇到任何问题 ，您可以订阅 [Dubbo 用户邮件列表](mailto:dubbo+subscribe@googlegroups.com)。
 - 问题反馈，您可以在 [issues](https://github.com/dubbo/dubbo-spring-boot-project/issues) 提出您遇到的使用问题。
 
 
 
+
 ## 模块工程
 
 Dubbo Spring Boot 采用多 Maven 模块工程 , 模块如下：
@@ -309,7 +270,7 @@
 
 * [健康检查](dubbo-spring-boot-actuator#health-checks)
 * [控制断点](dubbo-spring-boot-actuator#endpoints)
-* [外部化配置](dubbo-spring-boot-actuator#externalized-configuration))
+* [外部化配置](dubbo-spring-boot-actuator#externalized-configuration)
 
 
 ### [dubbo-spring-boot-starter](dubbo-spring-boot-starter)
@@ -320,19 +281,8 @@
 
 ### [dubbo-spring-boot-samples](dubbo-spring-boot-samples)
 
-The samples project of Dubbo Spring Boot that includes two parts:
-[dubbo-spring-boot-samples](dubbo-spring-boot-samples) 为 Dubbo Spring Boot 示例工程，包括：
+Dubbo Spring Boot 示例工程包括:
 
-
-#### [Dubbo 服务提供方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-provider)
-
-Dubbo 服务将会通过 localhost 的 `12345` 端口暴露服务，并且提供 JMX Endpoints。
-
-
-#### [Dubbo 服务消费方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-consumer)
-
-Dubbo 服务将被 Spring WebMVC `Controller` 消费，并且提供 JMX 以及 Web Endpoints 端口：
-
-* 示例 `Controller` : http://localhost:8080/sayHello?name=HelloWorld
-* [健康检查](dubbo-spring-boot-actuator#health-checks) : http://localhost:8081/actuator/health
-* [Dubbo Endpoints](dubbo-spring-boot-actuator#endpoints) : http://localhost:8081/actuator/dubbo
+- [自动装配](dubbo-spring-boot-samples/auto-configure-samples)
+- [外部化配置](dubbo-spring-boot-samples/externalized-configuration-samples)
+- [Zookeeper 注册中心](dubbo-spring-boot-samples/dubbo-registry-zookeeper-samples)
diff --git a/dubbo-spring-boot-actuator/README.md b/dubbo-spring-boot-actuator/README.md
index 1ff5754..8f52e1b 100644
--- a/dubbo-spring-boot-actuator/README.md
+++ b/dubbo-spring-boot-actuator/README.md
@@ -15,17 +15,6 @@
 
 
 
-## Versions
-
-For now, `dubbo-spring-boot-actuator` will separate two versions for Spring Boot 2.x and 1.x once release : 
-
-* `0.2.x` is a main stream release version for Spring Boot 2.x
-
-* `0.1.x` is a legacy version for maintaining Spring Boot 1.x
-
-
-
-
 ## Integrate with Maven
 
 You can introduce the latest `dubbo-spring-boot-actuator` to your project by adding the following dependency to your pom.xml
@@ -33,15 +22,17 @@
 <dependency>
     <groupId>org.apache.dubbo</groupId>
     <artifactId>dubbo-spring-boot-actuator</artifactId>
-    <version>0.2.1</version>
+    <version>2.7.0</version>
 </dependency>
 ```
+
 If your project failed to resolve the dependency, try to add the following repository:
 ```xml
 <repositories>
     <repository>
-        <id>sonatype-nexus-snapshots</id>
-        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+        <id>apache.snapshots.https</id>
+        <name>Apache Development Snapshot Repository</name>
+        <url>https://repository.apache.org/content/repositories/snapshots</url>
         <releases>
             <enabled>false</enabled>
         </releases>
@@ -108,10 +99,6 @@
 }
 ```
 
-In [samples](../dubbo-spring-boot-samples/) , `/health` Web Endpoints are exposed on http://localhost:8081/health 
-([consumer](../dubbo-spring-boot-samples/dubbo-spring-boot-sample-consumer))
-
-
 
  `memory`, `load`,  `threadpool` and `server` are Dubbo's build-in `StatusChecker`s in above example. 
  Dubbo allows the application to extend `StatusChecker`'s SPI. 
@@ -162,11 +149,11 @@
 | ID       | Enabled          | HTTP URI            | HTTP Method | Description                         | Content Type       |
 | ------------------- | ----------- | ----------------------------------- | ------------------ | ------------------ | ------------------ |
 | `dubbo`    | `true`      | `/actuator/dubbo`            | `GET`       | Exposes Dubbo's meta data           | `application/json` |
-| `dubboProperties` | `true` | `/actuator/dubbo/properties` | `GET`       | Exposes all Dubbo's Properties      | `application/json` |
-| `dubboServices` | `false`     | `/dubbo/services`            | `GET`       | Exposes all Dubbo's `ServiceBean`   | `application/json` |
-| `dubboReferences` | `false` | `/actuator/dubbo/references` | `GET`       | Exposes all Dubbo's `ReferenceBean` | `application/json` |
-| `dubboConfigs` | `true` | `/actuator/dubbo/configs`    | `GET`       | Exposes all Dubbo's `*Config`       | `application/json` |
-| `dubboShutdown` | `false` | `/actuator/dubbo/shutdown`   | `POST`      | Shutdown Dubbo services             | `application/json` |
+| `dubboproperties` | `true` | `/actuator/dubbo/properties` | `GET`       | Exposes all Dubbo's Properties      | `application/json` |
+| `dubboservices` | `false`     | `/dubbo/services`            | `GET`       | Exposes all Dubbo's `ServiceBean`   | `application/json` |
+| `dubboreferences` | `false` | `/actuator/dubbo/references` | `GET`       | Exposes all Dubbo's `ReferenceBean` | `application/json` |
+| `dubboconfigs` | `true` | `/actuator/dubbo/configs`    | `GET`       | Exposes all Dubbo's `*Config`       | `application/json` |
+| `dubboshutdown` | `false` | `/actuator/dubbo/shutdown`   | `POST`      | Shutdown Dubbo services             | `application/json` |
 
 
 
@@ -184,8 +171,8 @@
 {
   "timestamp": 1516623290166,
   "versions": {
-    "dubbo-spring-boot": "0.2.0",
-    "dubbo": "2.6.2"
+    "dubbo-spring-boot": "2.7.0",
+    "dubbo": "2.7.0"
   },
   "urls": {
     "dubbo": "https://github.com/alibaba/dubbo",
diff --git a/dubbo-spring-boot-actuator/README_CN.md b/dubbo-spring-boot-actuator/README_CN.md
deleted file mode 100644
index c3dbf4f..0000000
--- a/dubbo-spring-boot-actuator/README_CN.md
+++ /dev/null
@@ -1,513 +0,0 @@
-# Dubbo Spring Boot Production-Ready
-
-`dubbo-spring-boot-actuator` 提供 Production-Ready 特性 (比如 [健康检查](#health-checks),  [OPS 端点](#endpoints), and [外部化配置](#externalized-configuration)).
-
-
-
-## 目录
-
-1. [主目录](https://github.com/dubbo/dubbo-spring-boot-project)
-2. [Maven 整合](#integrate-with-maven)
-3. [健康检查](#health-checks)
-4. [OPS 端点](#endpoints)
-5. [外部化配置](#externalized-configuration)
-
-
-
-## Maven 整合
-
-### 稳定版本
-
-`dubbo-spring-boot-actuator` 是可选模块，它不应该独立存在，需要与 `dubbo-spring-boot-starter` 并存方可工作正常。您可以直接增加到
-应用工程的 pom.xml 文件：
-
-
-```xml
-<dependencies>
-
-    ...
-
-    <!-- 功能特性 -->
-    <dependency>
-        <groupId>org.apache.dubbo</groupId>
-        <artifactId>dubbo-spring-boot-starter</artifactId>
-        <version>0.2.1</version>
-    </dependency>
-
-    <!-- Production-Ready 特性 -->
-    <dependency>
-        <groupId>org.apache.dubbo</groupId>
-        <artifactId>dubbo-spring-boot-actuator</artifactId>
-        <version>0.2.1</version>
-    </dependency>
-
-     ...
-
-</dependencies>
-```
-
-### 开发版本
-
-如果你需要尝试最新 `dubbo-spring-boot-actuator` 的特性，您可以自将[开发分支](../tree/0.1.x) 手动 Maven install 到本地 Maven 仓库。
-
-
-## 健康检查
-
-`dubbo-spring-boot-actuator` 实现了标准的 Spring Boot `HealthIndicator` , 它将聚合 Dubbo 相关的健康指标数据到 Spring Boot's `Health`
- ，并且 暴露在 `HealthEndpoint` ，它能够在 works MVC (Spring Web MVC) and JMX (Java Management Extensions) both if they are available.
-
-
-### Web Endpoint : `/health`
-
-
-假设 Spring Boot Web 应用没有指定 `management.port` 属性, 运行后，通过 Web 客户端访问 http://localhost:8080/health，HTTP 相应将会返回一个 JSON 格式的内容，如下所示:
-
-```json
-{
-  "status": "UP",
-  "dubbo": {
-    "status": "UP",
-    "memory": {
-      "source": "management.health.dubbo.status.defaults",
-      "status": {
-        "level": "OK",
-        "message": "max:3641M,total:383M,used:92M,free:291M",
-        "description": null
-      }
-    },
-    "load": {
-      "source": "management.health.dubbo.status.extras",
-      "status": {
-        "level": "OK",
-        "message": "load:1.73583984375,cpu:8",
-        "description": null
-      }
-    },
-    "threadpool": {
-      "source": "management.health.dubbo.status.extras",
-      "status": {
-        "level": "OK",
-        "message": "Pool status:OK, max:200, core:200, largest:0, active:0, task:0, service port: 12345",
-        "description": null
-      }
-    },
-    "server": {
-      "source": "dubbo@ProtocolConfig.getStatus()",
-      "status": {
-        "level": "OK",
-        "message": "/192.168.1.103:12345(clients:0)",
-        "description": null
-      }
-    }
-  }
-  // ignore others
-}
-```
-
-
-
-其中 `memory`, `load`,  `threadpool` and `server` 是 Dubbo 内建的 `StatusChecker`s，并且 Dubbo 允许应用程序扩展 `StatusChecker`'s SPI.
-
-默认情况, `memory` and `load` 将被添加到 Dubbo 的 `HealthIndicator` , 可以通过外部化配置覆盖默认值，请参考 [`StatusChecker`'s 默认值](#statuschecker-defaults).
-
-
-
-### JMX Endpoint : `healthEndpoint`
-
-
-`dubbo-spring-boot-actuator` 也将暴露健康检查的 JMX Endpoint，它的 `ObjectName` 为 `org.springframework.boot:type=Endpoint,name=healthEndpoint` ,
- 开发人员可以通过 JMX 代理工具 ,比如 `jconsole` 等：
-
-![](JMX_HealthEndpoint.png)
-
-
-
-### 内建 `StatusChecker`s
-
-
-Dubbo 内建 `StatusChecker` 实现定义在 `META-INF/dubbo/internal/com.alibaba.dubbo.common.status.StatusChecker` 文件中，内容如下 :
-
-```properties
-registry=com.alibaba.dubbo.registry.status.RegistryStatusChecker
-spring=com.alibaba.dubbo.config.spring.status.SpringStatusChecker
-datasource=com.alibaba.dubbo.config.spring.status.DataSourceStatusChecker
-memory=com.alibaba.dubbo.common.status.support.MemoryStatusChecker
-load=com.alibaba.dubbo.common.status.support.LoadStatusChecker
-server=com.alibaba.dubbo.rpc.protocol.dubbo.status.ServerStatusChecker
-threadpool=com.alibaba.dubbo.rpc.protocol.dubbo.status.ThreadPoolStatusChecker
-```
-
-
-
-The property key that is name of  `StatusChecker` can be a valid value of `management.health.dubbo.status.*` in externalized configuration.
-
-
-
-## Endpoints
-
-
-
-Actuator endpoint `dubbo` supports Spring Web MVC Endpoints : 
-
-| URI                 | HTTP Method | Description                         | Content Type       |
-| ------------------- | ----------- | ----------------------------------- | ------------------ |
-| `/dubbo`            | `GET`       | Exposes Dubbo's meta data           | `application/json` |
-| `/dubbo/properties` | `GET`       | Exposes all Dubbo's Properties      | `application/json` |
-| `/dubbo/services`   | `GET`       | Exposes all Dubbo's `ServiceBean`   | `application/json` |
-| `/dubbo/references` | `GET`       | Exposes all Dubbo's `ReferenceBean` | `application/json` |
-| `/dubbo/configs`    | `GET`       | Exposes all Dubbo's `*Config`       | `application/json` |
-| `/dubbo/shutdown`   | `POST`      | Shutdown Dubbo services             | `application/json` |
-
-
-
-### Endpoint : `/dubbo`
-
-`/dubbo` exposes Dubbo's meta data : 
-
-```json
-{
-  "timestamp": 1516623290166,
-  "versions": {
-    "dubbo-spring-boot": "1.0.0"
-    "dubbo": "2.5.9"
-  },
-  "urls": {
-    "dubbo": "https://github.com/alibaba/dubbo",
-    "google-group": "http://groups.google.com/group/dubbo",
-    "github": "https://github.com/dubbo/dubbo-spring-boot-project",
-    "issues": "https://github.com/dubbo/dubbo-spring-boot-project/issues",
-    "git": "https://github.com/dubbo/dubbo-spring-boot-project.git"
-  }
-}
-```
-
-
-
-
-
-### Endpoint : `/dubbo/properties`
-
-`/dubbo/properties` exposes all Dubbo's Properties from Spring Boot Externalized Configuration (a.k.a `PropertySources`) : 
-
-```json
-{
-  "dubbo.application.id": "dubbo-provider-demo",
-  "dubbo.application.name": "dubbo-provider-demo",
-  "dubbo.application.qos-enable": "false",
-  "dubbo.application.qos-port": "33333",
-  "dubbo.protocol.id": "dubbo",
-  "dubbo.protocol.name": "dubbo",
-  "dubbo.protocol.port": "12345",
-  "dubbo.registry.address": "N/A",
-  "dubbo.registry.id": "my-registry",
-  "dubbo.scan.basePackages": "org.apache.dubbo.spring.boot.demo.provider.service"
-}
-```
-
-The structure of JSON is simple Key-Value format , the key is property name as and the value is property value.
-
-
-
-
-
-### Endpoint : `/dubbo/services`
-
-`/dubbo/services` exposes all Dubbo's `ServiceBean` that are declared via `<dubbo:service/>` or `@Service`  present in Spring `ApplicationContext` :
-
-```json
-{
-  "ServiceBean@org.apache.dubbo.spring.boot.demo.api.DemoService#defaultDemoService": {
-    "accesslog": null,
-    "actives": null,
-    "cache": null,
-    "callbacks": null,
-    "class": "com.alibaba.dubbo.config.spring.ServiceBean",
-    "cluster": null,
-    "connections": null,
-    "delay": null,
-    "document": null,
-    "executes": null,
-    "export": null,
-    "exported": true,
-    "filter": "",
-    "generic": "false",
-    "group": null,
-    "id": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "interface": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "interfaceClass": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "layer": null,
-    "listener": "",
-    "loadbalance": null,
-    "local": null,
-    "merger": null,
-    "mock": null,
-    "onconnect": null,
-    "ondisconnect": null,
-    "owner": null,
-    "path": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "proxy": null,
-    "retries": null,
-    "scope": null,
-    "sent": null,
-    "stub": null,
-    "timeout": null,
-    "token": null,
-    "unexported": false,
-    "uniqueServiceName": "org.apache.dubbo.spring.boot.demo.api.DemoService:1.0.0",
-    "validation": null,
-    "version": "1.0.0",
-    "warmup": null,
-    "weight": null,
-    "serviceClass": "DefaultDemoService"
-  }
-}
-```
-
-The key is the Bean name of `ServiceBean` , `ServiceBean`'s properties compose value.
-
-
-
-### Endpoint : `/dubbo/references`
-
-`/dubbo/references` exposes all Dubbo's `ReferenceBean` that are declared via `@Reference` annotating on `Field` or `Method  ` :
-
-```json
-{
-  "private org.apache.dubbo.spring.boot.demo.api.DemoService org.apache.dubbo.spring.boot.demo.consumer.controller.DemoConsumerController.demoService": {
-    "actives": null,
-    "cache": null,
-    "callbacks": null,
-    "class": "com.alibaba.dubbo.config.spring.ReferenceBean",
-    "client": null,
-    "cluster": null,
-    "connections": null,
-    "filter": "",
-    "generic": null,
-    "group": null,
-    "id": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "interface": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "interfaceClass": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "layer": null,
-    "lazy": null,
-    "listener": "",
-    "loadbalance": null,
-    "local": null,
-    "merger": null,
-    "mock": null,
-    "objectType": "org.apache.dubbo.spring.boot.demo.api.DemoService",
-    "onconnect": null,
-    "ondisconnect": null,
-    "owner": null,
-    "protocol": null,
-    "proxy": null,
-    "reconnect": null,
-    "retries": null,
-    "scope": null,
-    "sent": null,
-    "singleton": true,
-    "sticky": null,
-    "stub": null,
-    "stubevent": null,
-    "timeout": null,
-    "uniqueServiceName": "org.apache.dubbo.spring.boot.demo.api.DemoService:1.0.0",
-    "url": "dubbo://localhost:12345",
-    "validation": null,
-    "version": "1.0.0",
-    "invoker": {
-      "class": "com.alibaba.dubbo.common.bytecode.proxy0"
-    }
-  }
-}
-```
-
-The key is the string presentation of `@Reference` `Field` or `Method  `  , `ReferenceBean`'s properties compose value.
-
-
-
-### Endpoint : `/dubbo/configs`
-
- `/dubbo/configs` exposes all Dubbo's `*Config` :
-
-```json
-{
-  "ApplicationConfig": {
-    "dubbo-consumer-demo": {
-      "architecture": null,
-      "class": "com.alibaba.dubbo.config.ApplicationConfig",
-      "compiler": null,
-      "dumpDirectory": null,
-      "environment": null,
-      "id": "dubbo-consumer-demo",
-      "logger": null,
-      "name": "dubbo-consumer-demo",
-      "organization": null,
-      "owner": null,
-      "version": null
-    }
-  },
-  "ConsumerConfig": {
-    
-  },
-  "MethodConfig": {
-    
-  },
-  "ModuleConfig": {
-    
-  },
-  "MonitorConfig": {
-    
-  },
-  "ProtocolConfig": {
-    "dubbo": {
-      "accepts": null,
-      "accesslog": null,
-      "buffer": null,
-      "charset": null,
-      "class": "com.alibaba.dubbo.config.ProtocolConfig",
-      "client": null,
-      "codec": null,
-      "contextpath": null,
-      "dispatcher": null,
-      "dispather": null,
-      "exchanger": null,
-      "heartbeat": null,
-      "host": null,
-      "id": "dubbo",
-      "iothreads": null,
-      "name": "dubbo",
-      "networker": null,
-      "path": null,
-      "payload": null,
-      "port": 12345,
-      "prompt": null,
-      "queues": null,
-      "serialization": null,
-      "server": null,
-      "status": null,
-      "telnet": null,
-      "threadpool": null,
-      "threads": null,
-      "transporter": null
-    }
-  },
-  "ProviderConfig": {
-    
-  },
-  "ReferenceConfig": {
-    
-  },
-  "RegistryConfig": {
-    
-  },
-  "ServiceConfig": {
-    
-  }
-}
-```
-
-The key is the simple name of Dubbo `*Config`  Class , the value is`*Config` Beans' Name-Properties Map.
-
-
-
-### Endpoint : `/dubbo/shutdown`
-
-`/dubbo/shutdown` shutdowns Dubbo's components including registries, protocols, services and references :
-
-```json
-{
-    "shutdown.count": {
-        "registries": 0,
-        "protocols": 1,
-        "services": 0,
-        "references": 1
-    }
-}
-```
-
-"shutdown.count" means the count of shutdown of Dubbo's components , and the value indicates how many components have been shutdown.
-
-
-
-## Externalized Configuration
-
-
-
-### `StatusChecker` Defaults
-
-
-
-`management.health.dubbo.status.defaults` is a property name for setting names of `StatusChecker`s , its value is allowed to multiple-values , for example : 
-
-```properties
-management.health.dubbo.status.defaults = registry,memory,load
-```
-
-
-
-#### Default Value
-
-The default value is : 
-
-```properties
-management.health.dubbo.status.defaults = memory,load
-```
-
-
-
-### `StatusChecker` Extras
-
-
-
-`management.health.dubbo.status.extras` is used to override the [ [`StatusChecker`'s defaults]](#statuschecker-defaults) , the multiple-values is delimited by comma :
-
-```properties
-management.health.dubbo.status.extras = load,threadpool
-```
-
-
-
-### Health Checks Enabled
-
-
-
-`management.health.dubbo.enabled` is a enabled configuration to turn on or off health checks feature, its' default is `true`.
-
- If you'd like to disable health checks ,  you chould apply `management.health.dubbo.enabled` to be `false`:
-
-```properties
-management.health.dubbo.enabled = false
-```
-
-
-
-### Endpoints Enabled
-
-
-
-Dubbo Spring Boot providers actuator endpoint `dubbo` , however it is disable. If you'd like to enable it , please add following property into externalized configuration :
-
-```properties
-# Dubbo Endpoint enabled (default value is false)
-endpoints.dubbo.enabled = true
-```
-
-
-
-### Endpoints Sensitive
-
-Dubbo endpoints contain some sensitive information and significant opeations , thus it's sensitive , that means endpoints maybe protected and authorized if security resolved.
-
-
-
-If you consider it's fine to be public , you can add following property into externalized configuration :
-
-```properties
-# Dubbo Endpoint (default value is true)
-endpoints.dubbo.sensitive = false
-```
-
-> If Spring Security were resolved , configure more :
->
-> ```properties
-> management.security.enabled = false
-> ```
diff --git a/dubbo-spring-boot-autoconfigure/README.md b/dubbo-spring-boot-autoconfigure/README.md
index d27c8f6..0e32d7a 100644
--- a/dubbo-spring-boot-autoconfigure/README.md
+++ b/dubbo-spring-boot-autoconfigure/README.md
@@ -23,17 +23,17 @@
 <dependency>
     <groupId>org.apache.dubbo</groupId>
     <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
-    <version>0.2.1</version>
+    <version>2.7.0</version>
 </dependency>
 ```
 
 If your project failed to resolve the dependency, try to add the following repository:
-
 ```xml
 <repositories>
     <repository>
-        <id>sonatype-nexus-snapshots</id>
-        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+        <id>apache.snapshots.https</id>
+        <name>Apache Development Snapshot Repository</name>
+        <url>https://repository.apache.org/content/repositories/snapshots</url>
         <releases>
             <enabled>false</enabled>
         </releases>
@@ -50,7 +50,7 @@
 
 Since  `2.5.7`  , Dubbo totally supports Annotation-Driven , core Dubbo's components that are registered and initialized in  Spring application context , including exterialized configuration features. However , those features need to trigger in manual configuration , e.g `@DubboComponentScan` , `@EnableDubboConfig` or `@EnableDubbo`.
 
-> If you'd like to learn more , please read [Dubbo Annotation-Driven (Chinese)](https://github.com/mercyblitz/blogs/blob/master/java/dubbo/Dubbo-Annotation-Driven.md)
+> If you'd like to learn more , please read [Dubbo Annotation-Driven (Chinese)](http://dubbo.apache.org/zh-cn/blog/dubbo-annotation-driven.html)
 
 
 
@@ -62,7 +62,7 @@
 
 Externalized Configuration is a core feature of Spring Boot , Dubbo Spring Boot not only supports it definitely , but also inherits Dubbo's Externalized Configuration, thus it provides single and multiple Dubbo's `*Config` Bindings from `PropertySources` , and `"dubbo."` is a common prefix of property name.
 
-> If you'd like to learn more , please read [Dubbo Externalized Configuration](https://github.com/mercyblitz/blogs/blob/master/java/dubbo/Dubbo-Externalized-Configuration.md)(Chinese).
+> If you'd like to learn more , please read [Dubbo Externalized Configuration](http://dubbo.apache.org/zh-cn/blog/dubbo-externalized-configuration.html)(Chinese).
 
 
 
