You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2023/02/24 06:47:29 UTC

[skywalking-java] branch spring6 updated (c8f6fb6662 -> 7fa0325ca7)

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

kezhenxu94 pushed a change to branch spring6
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


 discard c8f6fb6662 Try to fix Spring 6 test case
     new 7fa0325ca7 Try to fix Spring 6 test case

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (c8f6fb6662)
            \
             N -- N -- N   refs/heads/spring6 (7fa0325ca7)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml                 | 1 +
 .../{resttemplate-4.x-plugin => resttemplate-3.x-plugin}/pom.xml  | 8 +++-----
 .../async/define/ResponseExtractorFutureInstrumentation3x.java}   | 6 +++---
 .../resttemplate/async/define/RestTemplateInstrumentation3x.java} | 6 +++---
 .../resttemplate/sync/define/RestTemplateInstrumentation3x.java}  | 4 ++--
 .../src/main/resources/skywalking-plugin.def                      | 6 +++---
 .../resttemplate/sync/define/RestTemplateInstrumentation4x.java   | 2 +-
 7 files changed, 16 insertions(+), 17 deletions(-)
 copy apm-sniffer/apm-sdk-plugin/spring-plugins/{resttemplate-4.x-plugin => resttemplate-3.x-plugin}/pom.xml (89%)
 copy apm-sniffer/apm-sdk-plugin/spring-plugins/{resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation4x.java => resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation3x.java} (91%)
 copy apm-sniffer/apm-sdk-plugin/spring-plugins/{resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation4x.java => resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation3x.java} (91%)
 copy apm-sniffer/apm-sdk-plugin/spring-plugins/{resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation4x.java => resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation3x.java} (90%)
 copy apm-sniffer/apm-sdk-plugin/spring-plugins/{resttemplate-4.x-plugin => resttemplate-3.x-plugin}/src/main/resources/skywalking-plugin.def (73%)


[skywalking-java] 01/01: Try to fix Spring 6 test case

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git

commit 7fa0325ca777fbf6a759e01f90ab8bebea6ac29b
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Fri Feb 24 14:47:17 2023 +0800

    Try to fix Spring 6 test case
---
 .github/workflows/plugins-jdk17-test.1.yaml        |  3 ++
 .github/workflows/plugins-test.2.yaml              | 23 ++--------
 .github/workflows/plugins-test.3.yaml              | 53 ++--------------------
 apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml  |  2 +
 .../pom.xml                                        | 13 ++++--
 .../ResponseExtractorFutureInstrumentation3x.java  | 43 ++++++++++++++++++
 .../define/RestTemplateInstrumentation3x.java      | 41 +++++++++++++++++
 .../sync/define/RestTemplateInstrumentation3x.java | 38 ++++++++++++++++
 .../src/main/resources/skywalking-plugin.def       |  6 +--
 .../spring-plugins/resttemplate-4.x-plugin/pom.xml |  5 ++
 .../ResponseExtractorFutureInstrumentation4x.java  | 43 ++++++++++++++++++
 .../define/RestTemplateInstrumentation4x.java      | 41 +++++++++++++++++
 .../sync/define/RestTemplateInstrumentation4x.java | 38 ++++++++++++++++
 .../src/main/resources/skywalking-plugin.def       |  6 +--
 .../pom.xml                                        |  6 +--
 .../resttemplate/async/FutureGetInterceptor.java   |  0
 .../async/ResponseCallBackInterceptor.java         |  0
 .../resttemplate/async/RestExecuteInterceptor.java |  0
 .../resttemplate/async/RestRequestInterceptor.java |  0
 .../ResponseExtractorFutureInstrumentation.java    |  9 +---
 .../async/define/RestTemplateInstrumentation.java  |  9 +---
 .../helper/RestTemplateRuntimeContextHelper.java   |  0
 .../resttemplate/sync/RestExecuteInterceptor.java  |  0
 .../resttemplate/sync/RestRequestInterceptor.java  |  0
 .../resttemplate/sync/RestResponseInterceptor.java |  0
 .../sync/define/RestTemplateInstrumentation.java   |  9 +---
 .../resttemplate-6.x-plugin/pom.xml                |  6 +++
 .../helper/RestTemplateRuntimeContextHelper.java   | 53 ----------------------
 .../v6x/sync/RestExecuteInterceptor.java           |  2 +-
 .../v6x/sync/RestRequestInterceptor.java           |  2 +-
 .../sync/define/RestTemplateInstrumentation.java   |  7 ++-
 31 files changed, 292 insertions(+), 166 deletions(-)

diff --git a/.github/workflows/plugins-jdk17-test.1.yaml b/.github/workflows/plugins-jdk17-test.1.yaml
index d820466d8c..6a671c312b 100644
--- a/.github/workflows/plugins-jdk17-test.1.yaml
+++ b/.github/workflows/plugins-jdk17-test.1.yaml
@@ -17,6 +17,9 @@
 name: Test
 
 on:
+  push:
+    branches:
+      - spring6
   pull_request:
     paths:
       - '.github/workflows/plugins-*.yaml'
diff --git a/.github/workflows/plugins-test.2.yaml b/.github/workflows/plugins-test.2.yaml
index 1b6ecaa9f9..c58dd82782 100644
--- a/.github/workflows/plugins-test.2.yaml
+++ b/.github/workflows/plugins-test.2.yaml
@@ -17,6 +17,9 @@
 name: Test
 
 on:
+  push:
+    branches:
+      - spring6
   pull_request:
     paths:
       - '.github/workflows/plugins-*.yaml'
@@ -52,31 +55,11 @@ jobs:
     strategy:
       matrix:
         case:
-          - okhttp-scenario
-          - play-scenario
-          - postgresql-scenario
-          - pulsar-scenario
-          - rabbitmq-scenario
-          - redisson-scenario
-          - resttemplate-4.x-scenario
-          - servicecomb-1.x-scenario
-          - servicecomb-2.x-scenario
-          - shardingsphere-3.x-scenario
-          - shardingsphere-4.0.x-scenario
-          - shardingsphere-4.x-scenario
-          - shardingsphere-5.0.0-scenario
-          - sofarpc-scenario
-          - solrj-7.x-scenario
           - spring-3.0.x-scenario
           - spring-cloud-feign-1.1.x-scenario
           - spring-cloud-feign-1.2.x-scenario
           - spring-cloud-feign-2.x-scenario
           - spring-tx-scenario
-          - struts2.3-scenario
-          - struts2.5-scenario
-          - cxf-scenario
-          - okhttp2-scenario
-          - rocketmq-scenario
     steps:
       - uses: actions/checkout@v2
         with:
diff --git a/.github/workflows/plugins-test.3.yaml b/.github/workflows/plugins-test.3.yaml
index 3127472d31..3d917bdd89 100644
--- a/.github/workflows/plugins-test.3.yaml
+++ b/.github/workflows/plugins-test.3.yaml
@@ -17,6 +17,9 @@
 name: Test
 
 on:
+  push:
+    branches:
+      - spring6
   pull_request:
     paths:
       - '.github/workflows/plugins-*.yaml'
@@ -52,60 +55,10 @@ jobs:
     strategy:
       matrix:
         case:
-          - mysql-scenario
-          - undertow-scenario
-          - webflux-scenario
-          - zookeeper-scenario
           - spring-3.1.x-scenario
           - spring-4.1.x-scenario
           - spring-4.3.x-scenario
           - spring-async-scenario
-          - vertx-core-4.x-scenario
-          - vertx-eventbus-3.x-scenario
-          - vertx-web-3.54minus-scenario
-          - vertx-web-3.6plus-scenario
-          - mariadb-scenario
-          - micronaut-http-scenario
-          - nats-2.14.x-2.15.x-scenario
-          - quasar-scenario
-          - baidu-brpc-scenario
-          - baidu-brpc-3.x-scenario
-          - retransform-class-scenario
-          - retransform-class-tomcat-scenario
-          - graphql-8.x-scenario
-          - graphql-9.x-scenario
-          - graphql-16plus-scenario
-          - graphql-12.x-15.x-scenario
-          - hbase-scenario
-          - spring-kafka-1.3.x-scenario
-          - spring-kafka-2.2.x-scenario
-          - spring-kafka-2.3.x-scenario
-          - spring-scheduled-scenario
-          - elasticjob-2.x-scenario
-          - quartz-scheduler-2.x-scenario
-          - xxl-job-2.2.0-scenario
-          - xxl-job-2.3.x-scenario
-          - thrift-scenario
-          - dbcp-2.x-scenario
-          - jsonrpc4j-1.x-scenario
-          - gateway-3.x-scenario
-          - neo4j-4.x-scenario
-          - oracle-scenario
-          - druid-1.x-scenario
-          - hikaricp-scenario
-          - clickhouse-0.3.1-scenario
-          - clickhouse-0.3.2.x-scenario
-          - kylin-jdbc-2.6.x-3.x-4.x-scenario
-          - undertow-worker-thread-pool-scenario
-          - tomcat-thread-pool-scenario
-          - guava-eventbus-scenario
-          - shenyu-2.4.x-scenario
-          - jdk-threadpool-scenario
-          - shenyu-2.4.x-dubbo-scenario
-          - grpc-generic-call-scenario
-          - shenyu-2.4.x-grpc-scenario
-          - shenyu-2.4.x-sofarpc-scenario
-          - impala-jdbc-2.6.x-scenario
     steps:
       - uses: actions/checkout@v2
         with:
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
index da106f5e68..a475473dcb 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
@@ -30,6 +30,7 @@
     <modules>
         <module>async-annotation-plugin</module>
         <module>concurrent-util-4.x-plugin</module>
+        <module>resttemplate-3.x-plugin</module>
         <module>resttemplate-4.x-plugin</module>
         <module>mvc-annotation-4.x-plugin</module>
         <module>spring-cloud</module>
@@ -42,6 +43,7 @@
         <module>spring-kafka-2.x-plugin</module>
         <module>scheduled-annotation-plugin</module>
         <module>spring-webflux-5.x-webclient-plugin</module>
+        <module>resttemplate-commons</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/pom.xml
similarity index 82%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/pom.xml
index bcc756a8af..86ae89c480 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/pom.xml
@@ -24,14 +24,12 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>apm-resttemplate-4.3.x-plugin</artifactId>
-    <packaging>jar</packaging>
+    <artifactId>apm-resttemplate-3.x-plugin</artifactId>
 
-    <name>resttemplate-4.3.x-plugin</name>
-    <url>http://maven.apache.org</url>
+    <name>resttemplate-3.x-plugin</name>
 
     <properties>
-        <spring-web.version>4.3.10.RELEASE</spring-web.version>
+        <spring-web.version>3.2.18.RELEASE</spring-web.version>
     </properties>
 
     <dependencies>
@@ -47,5 +45,10 @@
             <artifactId>spring-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>resttemplate-commons</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation3x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation3x.java
new file mode 100644
index 0000000000..f8fa39b2b9
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation3x.java
@@ -0,0 +1,43 @@
+/*
+ * 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.skywalking.apm.plugin.spring.resttemplate.async.define;
+
+import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
+import org.apache.skywalking.apm.plugin.spring.resttemplate.async.ResponseCallBackInterceptor;
+
+import java.net.URI;
+
+/**
+ * {@link ResponseExtractorFutureInstrumentation3x} enhance the <code>addCallback</code> method and
+ * <code>getDefault</code> method of <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code>
+ * by
+ * <code>ResponseCallBackInterceptor</code> and
+ * <code>FutureGetInterceptor</code>.
+ * <p>
+ * {@link ResponseCallBackInterceptor} set the {@link URI} and {@link ContextSnapshot} to inherited
+ * <code>org.springframework.util.concurrent.SuccessCallback</code> and <code>org.springframework.util.concurrent.FailureCallback</code>
+ */
+public class ResponseExtractorFutureInstrumentation3x extends ResponseExtractorFutureInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation3x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation3x.java
new file mode 100644
index 0000000000..4a88b277d8
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation3x.java
@@ -0,0 +1,41 @@
+/*
+ * 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.skywalking.apm.plugin.spring.resttemplate.async.define;
+
+import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
+
+import java.net.URI;
+
+/**
+ * {@link RestTemplateInstrumentation3x} enhance the <code>doExecute</code> method and <code>createAsyncRequest</code>
+ * method of <code>org.springframework.web.client.AsyncRestTemplate</code> by <code>RestExecuteInterceptor</code> and
+ * <code>org.springframework.http.client.RestRequestInterceptor</code>.
+ *
+ * <code>org.springframework.http.client.RestRequestInterceptor</code> set {@link URI} and {@link ContextSnapshot} to
+ * <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code> for propagate trace context
+ * after execute <code>doExecute</code> .
+ */
+public class RestTemplateInstrumentation3x extends RestTemplateInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation3x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation3x.java
new file mode 100644
index 0000000000..8c10616d0a
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation3x.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.skywalking.apm.plugin.spring.resttemplate.sync.define;
+
+/**
+ * {@link RestTemplateInstrumentation} enhance the <code>doExecute</code> method,<code>handleResponse</code> method and
+ * <code>handleResponse</code> method of <code>org.springframework.web.client.RestTemplate</code> by
+ * <code>RestExecuteInterceptor</code>,
+ * <code>RestResponseInterceptor</code> and
+ * <code>RestRequestInterceptor</code>.
+ *
+ * <code>RestResponseInterceptor</code> set context to  header for
+ * propagate trace context after execute <code>createRequest</code>.
+ */
+public class RestTemplateInstrumentation3x extends RestTemplateInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/resources/skywalking-plugin.def
similarity index 73%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/resources/skywalking-plugin.def
index 98a8a1b7cb..651bbca242 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-3.x-plugin/src/main/resources/skywalking-plugin.def
@@ -14,6 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.sync.define.RestTemplateInstrumentation
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.ResponseExtractorFutureInstrumentation
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.RestTemplateInstrumentation
+spring-resttemplate-3.x=org.apache.skywalking.apm.plugin.spring.resttemplate.sync.define.RestTemplateInstrumentation3x
+spring-resttemplate-3.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.ResponseExtractorFutureInstrumentation3x
+spring-resttemplate-3.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.RestTemplateInstrumentation3x
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
index bcc756a8af..071a420215 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
@@ -47,5 +47,10 @@
             <artifactId>spring-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>resttemplate-commons</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation4x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation4x.java
new file mode 100644
index 0000000000..b3a3d031f0
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation4x.java
@@ -0,0 +1,43 @@
+/*
+ * 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.skywalking.apm.plugin.spring.resttemplate.async.define;
+
+import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
+import org.apache.skywalking.apm.plugin.spring.resttemplate.async.ResponseCallBackInterceptor;
+
+import java.net.URI;
+
+/**
+ * {@link ResponseExtractorFutureInstrumentation4x} enhance the <code>addCallback</code> method and
+ * <code>getDefault</code> method of <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code>
+ * by
+ * <code>ResponseCallBackInterceptor</code> and
+ * <code>FutureGetInterceptor</code>.
+ * <p>
+ * {@link ResponseCallBackInterceptor} set the {@link URI} and {@link ContextSnapshot} to inherited
+ * <code>org.springframework.util.concurrent.SuccessCallback</code> and <code>org.springframework.util.concurrent.FailureCallback</code>
+ */
+public class ResponseExtractorFutureInstrumentation4x extends ResponseExtractorFutureInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation4x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation4x.java
new file mode 100644
index 0000000000..87da28d960
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation4x.java
@@ -0,0 +1,41 @@
+/*
+ * 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.skywalking.apm.plugin.spring.resttemplate.async.define;
+
+import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
+
+import java.net.URI;
+
+/**
+ * {@link RestTemplateInstrumentation4x} enhance the <code>doExecute</code> method and <code>createAsyncRequest</code>
+ * method of <code>org.springframework.web.client.AsyncRestTemplate</code> by <code>RestExecuteInterceptor</code> and
+ * <code>org.springframework.http.client.RestRequestInterceptor</code>.
+ *
+ * <code>org.springframework.http.client.RestRequestInterceptor</code> set {@link URI} and {@link ContextSnapshot} to
+ * <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code> for propagate trace context
+ * after execute <code>doExecute</code> .
+ */
+public class RestTemplateInstrumentation4x extends RestTemplateInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation4x.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation4x.java
new file mode 100644
index 0000000000..319ff6244c
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation4x.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.skywalking.apm.plugin.spring.resttemplate.sync.define;
+
+/**
+ * {@link RestTemplateInstrumentation} enhance the <code>doExecute</code> method,<code>handleResponse</code> method and
+ * <code>handleResponse</code> method of <code>org.springframework.web.client.RestTemplate</code> by
+ * <code>RestExecuteInterceptor</code>,
+ * <code>RestResponseInterceptor</code> and
+ * <code>RestRequestInterceptor</code>.
+ *
+ * <code>RestResponseInterceptor</code> set context to  header for
+ * propagate trace context after execute <code>createRequest</code>.
+ */
+public class RestTemplateInstrumentation4x extends RestTemplateInstrumentation {
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {
+            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def
index 98a8a1b7cb..909ddfb3f8 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/resources/skywalking-plugin.def
@@ -14,6 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.sync.define.RestTemplateInstrumentation
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.ResponseExtractorFutureInstrumentation
-spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.RestTemplateInstrumentation
+spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.sync.define.RestTemplateInstrumentation4x
+spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.ResponseExtractorFutureInstrumentation4x
+spring-resttemplate-4.x=org.apache.skywalking.apm.plugin.spring.resttemplate.async.define.RestTemplateInstrumentation4x
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/pom.xml
similarity index 91%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/pom.xml
index bcc756a8af..0a2feba4c3 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/pom.xml
@@ -24,11 +24,9 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>apm-resttemplate-4.3.x-plugin</artifactId>
-    <packaging>jar</packaging>
+    <artifactId>resttemplate-commons</artifactId>
 
-    <name>resttemplate-4.3.x-plugin</name>
-    <url>http://maven.apache.org</url>
+    <name>resttemplate-commons</name>
 
     <properties>
         <spring-web.version>4.3.10.RELEASE</spring-web.version>
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/FutureGetInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/ResponseCallBackInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/ResponseCallBackInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/ResponseCallBackInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/ResponseCallBackInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestRequestInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestRequestInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/RestRequestInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
similarity index 93%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
index cc42085927..f9497fa925 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/ResponseExtractorFutureInstrumentation.java
@@ -41,7 +41,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
  * {@link ResponseCallBackInterceptor} set the {@link URI} and {@link ContextSnapshot} to inherited
  * <code>org.springframework.util.concurrent.SuccessCallback</code> and <code>org.springframework.util.concurrent.FailureCallback</code>
  */
-public class ResponseExtractorFutureInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+public abstract class ResponseExtractorFutureInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ADD_CALLBACK_METHOD_NAME = "addCallback";
     private static final String ADD_CALLBACK_INTERCEPTOR = "org.apache.skywalking.apm.plugin.spring.resttemplate.async.ResponseCallBackInterceptor";
@@ -97,11 +97,4 @@ public class ResponseExtractorFutureInstrumentation extends ClassInstanceMethods
     protected ClassMatch enhanceClass() {
         return NameMatch.byName(ENHANCE_CLASS);
     }
-
-    @Override
-    protected String[] witnessClasses() {
-        return new String[] {
-            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
-        };
-    }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java
similarity index 93%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java
index c0722f8326..d7e9145248 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/async/define/RestTemplateInstrumentation.java
@@ -39,7 +39,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
  * <code>org.springframework.web.client.AsyncRestTemplate$ResponseExtractorFuture</code> for propagate trace context
  * after execute <code>doExecute</code> .
  */
-public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+public abstract class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.springframework.web.client.AsyncRestTemplate";
     private static final String DO_EXECUTE_METHOD_NAME = "doExecute";
@@ -94,11 +94,4 @@ public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePlug
     protected ClassMatch enhanceClass() {
         return NameMatch.byName(ENHANCE_CLASS);
     }
-
-    @Override
-    protected String[] witnessClasses() {
-        return new String[] {
-            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
-        };
-    }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/helper/RestTemplateRuntimeContextHelper.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/helper/RestTemplateRuntimeContextHelper.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/helper/RestTemplateRuntimeContextHelper.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/helper/RestTemplateRuntimeContextHelper.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestResponseInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestResponseInterceptor.java
similarity index 100%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestResponseInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/RestResponseInterceptor.java
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java
similarity index 94%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java
index 9c98b81c50..8089e2a7b7 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/sync/define/RestTemplateInstrumentation.java
@@ -38,7 +38,7 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
  * <code>RestResponseInterceptor</code> set context to  header for
  * propagate trace context after execute <code>createRequest</code>.
  */
-public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+public abstract class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.springframework.web.client.RestTemplate";
     private static final String DO_EXECUTE_METHOD_NAME = "doExecute";
@@ -111,11 +111,4 @@ public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePlug
     protected ClassMatch enhanceClass() {
         return byName(ENHANCE_CLASS);
     }
-
-    @Override
-    protected String[] witnessClasses() {
-        return new String[] {
-            "org.springframework.web.context.support.ServletContextAttributeFactoryBean"
-        };
-    }
 }
diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/pom.xml
index ecad2c0244..0cd440c1bf 100644
--- a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/pom.xml
+++ b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/pom.xml
@@ -47,5 +47,11 @@
             <artifactId>spring-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>resttemplate-commons</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/helper/RestTemplateRuntimeContextHelper.java b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/helper/RestTemplateRuntimeContextHelper.java
deleted file mode 100644
index bed866a0bc..0000000000
--- a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/helper/RestTemplateRuntimeContextHelper.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.apm.plugin.spring.resttemplate.v6x.helper;
-
-import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
-import org.apache.skywalking.apm.agent.core.context.ContextManager;
-
-public class RestTemplateRuntimeContextHelper {
-
-    private static final String REST_TEMPLATE_CONTEXT_CARRIER_KEY_IN_RUNTIME_CONTEXT = "REST_TEMPLATE_CONTEXT_CARRIER";
-
-    private static final String REST_TEMPLATE_URI_KEY_IN_RUNTIME_CONTEXT = "REST_TEMPLATE_URI";
-
-    public static void cleanUri() {
-        ContextManager.getRuntimeContext().remove(REST_TEMPLATE_URI_KEY_IN_RUNTIME_CONTEXT);
-    }
-
-    public static void cleanContextCarrier() {
-        ContextManager.getRuntimeContext().remove(REST_TEMPLATE_CONTEXT_CARRIER_KEY_IN_RUNTIME_CONTEXT);
-    }
-
-    public static void addUri(String uri) {
-        ContextManager.getRuntimeContext().put(REST_TEMPLATE_URI_KEY_IN_RUNTIME_CONTEXT, uri);
-    }
-
-    public static void addContextCarrier(ContextCarrier contextCarrier) {
-        ContextManager.getRuntimeContext().put(REST_TEMPLATE_CONTEXT_CARRIER_KEY_IN_RUNTIME_CONTEXT, contextCarrier);
-    }
-
-    public static String getUri() {
-        return (String) ContextManager.getRuntimeContext().get(REST_TEMPLATE_URI_KEY_IN_RUNTIME_CONTEXT);
-    }
-
-    public static ContextCarrier getContextCarrier() {
-        return (ContextCarrier) ContextManager.getRuntimeContext().get(REST_TEMPLATE_CONTEXT_CARRIER_KEY_IN_RUNTIME_CONTEXT);
-    }
-}
diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestExecuteInterceptor.java b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestExecuteInterceptor.java
index 7b9e7398e6..b4fff55686 100644
--- a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestExecuteInterceptor.java
+++ b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestExecuteInterceptor.java
@@ -29,7 +29,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
-import org.apache.skywalking.apm.plugin.spring.resttemplate.v6x.helper.RestTemplateRuntimeContextHelper;
+import org.apache.skywalking.apm.plugin.spring.resttemplate.helper.RestTemplateRuntimeContextHelper;
 import org.springframework.http.HttpMethod;
 
 public class RestExecuteInterceptor implements InstanceMethodsAroundInterceptor {
diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestRequestInterceptor.java b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestRequestInterceptor.java
index 455b897c58..f8bbd6bac5 100644
--- a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestRequestInterceptor.java
+++ b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/RestRequestInterceptor.java
@@ -24,7 +24,7 @@ import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
-import org.apache.skywalking.apm.plugin.spring.resttemplate.v6x.helper.RestTemplateRuntimeContextHelper;
+import org.apache.skywalking.apm.plugin.spring.resttemplate.helper.RestTemplateRuntimeContextHelper;
 import org.springframework.http.client.AbstractClientHttpRequest;
 import org.springframework.http.client.ClientHttpRequest;
 
diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/define/RestTemplateInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/define/RestTemplateInstrumentation.java
index c9fdb3823d..2c22415b4e 100644
--- a/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/define/RestTemplateInstrumentation.java
+++ b/apm-sniffer/optional-plugins/optional-spring-plugins/resttemplate-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/resttemplate/v6x/sync/define/RestTemplateInstrumentation.java
@@ -26,6 +26,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
 /**
@@ -59,7 +60,9 @@ public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePlug
             new InstanceMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher<MethodDescription> getMethodsMatcher() {
-                    return named(DO_EXECUTE_METHOD_NAME);
+                    return named(DO_EXECUTE_METHOD_NAME)
+                            .and(takesArgument(0, named("java.net.URI")))
+                            .and(takesArgument(2, named("org.springframework.http.HttpMethod")));
                 }
 
                 @Override
@@ -115,7 +118,7 @@ public class RestTemplateInstrumentation extends ClassInstanceMethodsEnhancePlug
     @Override
     protected String[] witnessClasses() {
         return new String[] {
-            "org.springframework.web.client.ClientHttpResponseDecorator"
+            "org.springframework.http.client.reactive.JdkClientHttpConnector"
         };
     }
 }