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

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


The following commit(s) were added to refs/heads/main by this push:
     new 1aabdb626b Fix MongoDB 4.11+, add Feign 12.2+ PathVar, add MariaDB 3.x 
plugin, remove PostgreSQL 9.4 from test (#802)
1aabdb626b is described below

commit 1aabdb626ba996e13b3a3ee6ecb169c8acc2b8a1
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Thu Apr 9 13:12:26 2026 +0800

    Fix MongoDB 4.11+, add Feign 12.2+ PathVar, add MariaDB 3.x plugin, remove 
PostgreSQL 9.4 from test (#802)
---
 .github/workflows/plugins-test.3.yaml              |   1 +
 CHANGES.md                                         |   3 +
 .../http/v9/define/PathVarV2Instrumentation.java   |  79 +++++++++++
 .../src/main/resources/skywalking-plugin.def       |   3 +-
 .../apm-sdk-plugin/mariadb-3.x-plugin/pom.xml      |  60 ++++++++
 .../v3/CreateCallableStatementInterceptor.java     |  49 +++++++
 .../v3/CreatePreparedStatementInterceptor.java     |  50 +++++++
 .../mariadb/v3/CreateStatementInterceptor.java     |  50 +++++++
 ...PreparedStatementExecuteMethodsInterceptor.java |  93 +++++++++++++
 .../jdbc/mariadb/v3/SetCatalogInterceptor.java     |  48 +++++++
 .../v3/StatementExecuteMethodsInterceptor.java     |  75 ++++++++++
 .../v3/define/ConnectionInstrumentation.java       | 144 +++++++++++++++++++
 .../mariadb/v3/define/DriverInstrumentation.java   |  36 +++++
 ...paredStatementIgnoredSetterInstrumentation.java |  33 +++++
 .../define/PreparedStatementInstrumentation.java   |  74 ++++++++++
 ...PreparedStatementNullSetterInstrumentation.java |  33 +++++
 .../PreparedStatementSetterInstrumentation.java    |  33 +++++
 .../v3/define/StatementInstrumentation.java        |  71 ++++++++++
 .../src/main/resources/skywalking-plugin.def       |   9 +-
 .../v3/CreateCallableStatementInterceptorTest.java |  67 +++++++++
 .../v3/CreatePreparedStatementInterceptorTest.java |  67 +++++++++
 .../mariadb/v3/CreateStatementInterceptorTest.java |  67 +++++++++
 ...aredStatementExecuteMethodsInterceptorTest.java | 153 +++++++++++++++++++++
 .../v3/StatementExecuteMethodsInterceptorTest.java | 118 ++++++++++++++++
 .../mongodb/v4/support/MongoRemotePeerHelper.java  |   2 +-
 apm-sniffer/apm-sdk-plugin/pom.xml                 |   1 +
 .../setup/service-agent/java-agent/Plugin-list.md  |   1 +
 .../service-agent/java-agent/Supported-list.md     |   6 +-
 .../scenarios/feign-scenario/support-version.list  |   2 +
 .../bin/startup.sh}                                |  14 +-
 .../mariadb-3.x-scenario/config/expectedData.yaml  | 114 +++++++++++++++
 .../configuration.yml}                             |  25 ++--
 test/plugin/scenarios/mariadb-3.x-scenario/pom.xml | 123 +++++++++++++++++
 .../src/main/assembly/assembly.xml                 |  41 ++++++
 .../apm/testcase/mariadb/Application.java          |  33 ++---
 .../apm/testcase/mariadb/MariadbConfig.java        |  58 ++++++++
 .../apm/testcase/mariadb/SQLExecutor.java          |  70 ++++++++++
 .../mariadb/controller/CaseController.java         |  63 +++++++++
 .../src/main/resources/application.yaml            |  23 ++++
 .../src/main/resources/jdbc.properties}            |  13 +-
 .../src/main/resources/log4j2.xml                  |  30 ++++
 .../support-version.list                           |  11 +-
 .../mongodb-4.x-scenario/support-version.list      |   3 +-
 .../support-version.list                           |   1 -
 44 files changed, 1990 insertions(+), 60 deletions(-)

diff --git a/.github/workflows/plugins-test.3.yaml 
b/.github/workflows/plugins-test.3.yaml
index 36ad8289a0..0c667a6d06 100644
--- a/.github/workflows/plugins-test.3.yaml
+++ b/.github/workflows/plugins-test.3.yaml
@@ -82,6 +82,7 @@ jobs:
           - vertx-web-3.54minus-scenario
           - vertx-web-3.6plus-scenario
           - mariadb-scenario
+          - mariadb-3.x-scenario
           - micronaut-http-scenario
           - nats-2.14.x-2.16.5-scenario
           - quasar-scenario
diff --git a/CHANGES.md b/CHANGES.md
index f55806ecda..bb89a9e688 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -12,11 +12,14 @@ Release Notes.
 * Extend MySQL plugin to support MySQL Connector/J 8.4.0 and 9.x (9.0 -> 9.6).
 * Extend MariaDB plugin to support MariaDB Connector/J 2.7.x.
 * Extend MongoDB 4.x plugin to support MongoDB Java Driver 4.2 -> 4.10. Fix 
db.bind_vars extraction for driver 4.9+ where 
InsertOperation/DeleteOperation/UpdateOperation classes were removed.
+* Fix MongoDB 4.x plugin for driver 4.11+ where Cluster.getDescription() was 
removed, use getCurrentDescription() instead.
 * Extend Feign plugin to support OpenFeign 10.x, 11.x, 12.1.
+* Add Feign 12.2+ PathVar support (BuildTemplateByResolvingArgs moved to 
RequestTemplateFactoryResolver).
 * Extend Undertow plugin to support Undertow 2.1.x, 2.2.x, 2.3.x.
 * Extend GraphQL plugin to support graphql-java 18 -> 24 (20+ requires JDK 17).
 * Extend Spring Kafka plugin to support Spring Kafka 2.4 -> 2.9 and 3.0 -> 3.3.
 * Enhance test/plugin/run.sh to support extra Maven properties per version in 
support-version.list (format: version,key=value).
+* Add MariaDB 3.x plugin (all classes renamed in 3.x).
 
 All issues and pull requests are 
[here](https://github.com/apache/skywalking/milestone/249?closed=1)
 
diff --git 
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
new file mode 100644
index 0000000000..434d3c2d55
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/PathVarV2Instrumentation.java
@@ -0,0 +1,79 @@
+/*
+ * 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.feign.http.v9.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static 
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class PathVarV2Instrumentation extends 
ClassInstanceMethodsEnhancePluginDefine {
+
+    /**
+     * Enhance class.
+     */
+    private static final String ENHANCE_CLASS = 
"feign.RequestTemplateFactoryResolver$BuildTemplateByResolvingArgs";
+
+    /**
+     * Intercept class.
+     */
+    private static final String INTERCEPT_CLASS = 
"org.apache.skywalking.apm.plugin.feign.http.v9.PathVarInterceptor";
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName(ENHANCE_CLASS);
+    }
+
+    @Override
+    protected String[] witnessClasses() {
+        return new String[] {"feign.RequestTemplateFactoryResolver"};
+    }
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() 
{
+        return new InstanceMethodsInterceptPoint[] {
+            new InstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return named("resolve");
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return INTERCEPT_CLASS;
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            }
+        };
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
 
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
index eda47ffa99..778a03f68f 100644
--- 
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
+++ 
b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
@@ -15,4 +15,5 @@
 # limitations under the License.
 
 
feign-default-http-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.DefaultHttpClientInstrumentation
-feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
\ No newline at end of file
+feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
+feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarV2Instrumentation
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml
new file mode 100644
index 0000000000..1011fdda12
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/pom.xml
@@ -0,0 +1,60 @@
+<!--
+  ~ 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>
+        <artifactId>apm-sdk-plugin</artifactId>
+        <groupId>org.apache.skywalking</groupId>
+        <version>9.7.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>apm-mariadb-3.x-plugin</artifactId>
+    <packaging>jar</packaging>
+
+    <name>mariadb-3.x-plugin</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <mariadb-java-client.version>3.5.1</mariadb-java-client.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb-java-client.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-jdbc-commons</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.java
new file mode 100644
index 0000000000..e7642c9fbb
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptor.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.skywalking.apm.plugin.jdbc.mariadb.v3;
+
+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.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreateCallableStatementInterceptor implements 
InstanceMethodsAroundInterceptor {
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] 
allArguments, Class<?>[] argumentsTypes,
+                             MethodInterceptResult result) {
+
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments, Class<?>[] argumentsTypes,
+                              Object ret) {
+        if (ret instanceof EnhancedInstance) {
+            ((EnhancedInstance) ret).setSkyWalkingDynamicField(new 
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(), 
(String) allArguments[0], "CallableStatement"));
+        }
+        return ret;
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                      Class<?>[] argumentsTypes, Throwable t) {
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.java
new file mode 100644
index 0000000000..a17b112718
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptor.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.skywalking.apm.plugin.jdbc.mariadb.v3;
+
+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.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreatePreparedStatementInterceptor implements 
InstanceMethodsAroundInterceptor {
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] 
allArguments, Class<?>[] argumentsTypes,
+                             MethodInterceptResult result) {
+
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments, Class<?>[] argumentsTypes,
+                              Object ret) {
+        if (ret instanceof EnhancedInstance) {
+            ((EnhancedInstance) ret).setSkyWalkingDynamicField(new 
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(), 
(String) allArguments[0], "PreparedStatement"));
+        }
+        return ret;
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                      Class<?>[] argumentsTypes, Throwable t) {
+
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.java
new file mode 100644
index 0000000000..036fe00a39
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptor.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.skywalking.apm.plugin.jdbc.mariadb.v3;
+
+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.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class CreateStatementInterceptor implements 
InstanceMethodsAroundInterceptor {
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] 
allArguments, Class<?>[] argumentsTypes,
+                             MethodInterceptResult result) {
+
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments, Class<?>[] argumentsTypes,
+                              Object ret) {
+        if (ret instanceof EnhancedInstance) {
+            ((EnhancedInstance) ret).setSkyWalkingDynamicField(new 
StatementEnhanceInfos((ConnectionInfo) objInst.getSkyWalkingDynamicField(), "", 
"Statement"));
+        }
+        return ret;
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                      Class<?>[] argumentsTypes, Throwable t) {
+
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
new file mode 100644
index 0000000000..8ec30304b7
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptor.java
@@ -0,0 +1,93 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.tag.Tags;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+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.jdbc.JDBCPluginConfig;
+import org.apache.skywalking.apm.plugin.jdbc.PreparedStatementParameterBuilder;
+import org.apache.skywalking.apm.plugin.jdbc.SqlBodyUtil;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class PreparedStatementExecuteMethodsInterceptor implements 
InstanceMethodsAroundInterceptor {
+
+    @Override
+    public final void beforeMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                   Class<?>[] argumentsTypes, 
MethodInterceptResult result) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
+        if (connectInfo == null) {
+            return;
+        }
+        AbstractSpan span = 
ContextManager.createExitSpan(buildOperationName(connectInfo, method.getName(), 
cacheObject
+            .getStatementName()), connectInfo.getDatabasePeer());
+        Tags.DB_TYPE.set(span, connectInfo.getDBType());
+        Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
+        Tags.DB_STATEMENT.set(span, 
SqlBodyUtil.limitSqlBodySize(cacheObject.getSql()));
+        span.setComponent(connectInfo.getComponent());
+
+        if (JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS) {
+            final Object[] parameters = cacheObject.getParameters();
+            if (parameters != null && parameters.length > 0) {
+                int maxIndex = cacheObject.getMaxIndex();
+                Tags.SQL_PARAMETERS.set(span, getParameterString(parameters, 
maxIndex));
+            }
+        }
+
+        SpanLayer.asDB(span);
+    }
+
+    @Override
+    public final Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                    Class<?>[] argumentsTypes, Object ret) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        if (cacheObject.getConnectionInfo() != null) {
+            ContextManager.stopSpan();
+        }
+        return ret;
+    }
+
+    @Override
+    public final void handleMethodException(EnhancedInstance objInst, Method 
method, Object[] allArguments,
+                                            Class<?>[] argumentsTypes, 
Throwable t) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        if (cacheObject.getConnectionInfo() != null) {
+            ContextManager.activeSpan().log(t);
+        }
+    }
+
+    private String buildOperationName(ConnectionInfo connectionInfo, String 
methodName, String statementName) {
+        return connectionInfo.getDBType() + "/JDBC/" + statementName + "/" + 
methodName;
+    }
+
+    private String getParameterString(Object[] parameters, int maxIndex) {
+        return new PreparedStatementParameterBuilder()
+            .setParameters(parameters)
+            .setMaxIndex(maxIndex)
+            .build();
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.java
new file mode 100644
index 0000000000..48b9b3e926
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/SetCatalogInterceptor.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.skywalking.apm.plugin.jdbc.mariadb.v3;
+
+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.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class SetCatalogInterceptor implements InstanceMethodsAroundInterceptor 
{
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] 
allArguments, Class<?>[] argumentsTypes,
+                             MethodInterceptResult result) {
+        Object dynamicField = objInst.getSkyWalkingDynamicField();
+        if (dynamicField instanceof ConnectionInfo) {
+            ((ConnectionInfo) 
dynamicField).setDatabaseName(String.valueOf(allArguments[0]));
+        }
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments, Class<?>[] argumentsTypes,
+                              Object ret) {
+        return ret;
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                      Class<?>[] argumentsTypes, Throwable t) {
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
new file mode 100644
index 0000000000..c88f921881
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.tag.Tags;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+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.jdbc.SqlBodyUtil;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import java.lang.reflect.Method;
+
+public class StatementExecuteMethodsInterceptor implements 
InstanceMethodsAroundInterceptor {
+    @Override
+    public final void beforeMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                   Class<?>[] argumentsTypes, 
MethodInterceptResult result) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
+        if (connectInfo != null) {
+            AbstractSpan span = 
ContextManager.createExitSpan(buildOperationName(connectInfo, method.getName(), 
cacheObject
+                    .getStatementName()), connectInfo.getDatabasePeer());
+            Tags.DB_TYPE.set(span, connectInfo.getDBType());
+            Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
+            String sql = allArguments.length > 0 ? (String) allArguments[0] : 
"";
+            sql = SqlBodyUtil.limitSqlBodySize(sql);
+            Tags.DB_STATEMENT.set(span, sql);
+            span.setComponent(connectInfo.getComponent());
+            SpanLayer.asDB(span);
+        }
+    }
+
+    @Override
+    public final Object afterMethod(EnhancedInstance objInst, Method method, 
Object[] allArguments,
+                                    Class<?>[] argumentsTypes, Object ret) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        if (cacheObject.getConnectionInfo() != null) {
+            ContextManager.stopSpan();
+        }
+        return ret;
+    }
+
+    @Override
+    public final void handleMethodException(EnhancedInstance objInst, Method 
method, Object[] allArguments,
+                                            Class<?>[] argumentsTypes, 
Throwable t) {
+        StatementEnhanceInfos cacheObject = (StatementEnhanceInfos) 
objInst.getSkyWalkingDynamicField();
+        if (cacheObject.getConnectionInfo() != null) {
+            ContextManager.activeSpan().log(t);
+        }
+    }
+
+    private String buildOperationName(ConnectionInfo connectionInfo, String 
methodName, String statementName) {
+        return connectionInfo.getDBType() + "/JDBC/" + statementName + "/" + 
methodName;
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
new file mode 100644
index 0000000000..2f7083eca4
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/ConnectionInstrumentation.java
@@ -0,0 +1,144 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.plugin.jdbc.define.Constants;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static 
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class ConnectionInstrumentation extends 
ClassInstanceMethodsEnhancePluginDefine {
+
+    private static final String ENHANCE_CLASS = "org.mariadb.jdbc.Connection";
+    private static final String CREATE_STATEMENT_INTERCEPTOR_CLASS = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreateStatementInterceptor";
+    private static final String CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreatePreparedStatementInterceptor";
+    private static final String CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.CreateCallableStatementInterceptor";
+    private static final String SET_CATALOG_INTERCEPTOR_CLASS = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.SetCatalogInterceptor";
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName(ENHANCE_CLASS);
+    }
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() 
{
+        return new InstanceMethodsInterceptPoint[]{
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named(Constants.CREATE_STATEMENT_METHOD_NAME);
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return CREATE_STATEMENT_INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                },
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named(Constants.PREPARE_STATEMENT_METHOD_NAME);
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                },
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named(Constants.PREPARE_CALL_METHOD_NAME);
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                },
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named(Constants.COMMIT_METHOD_NAME)
+                                .or(named(Constants.ROLLBACK_METHOD_NAME))
+                                .or(named(Constants.CLOSE_METHOD_NAME))
+                                
.or(named(Constants.RELEASE_SAVE_POINT_METHOD_NAME));
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return Constants.SERVICE_METHOD_INTERCEPT_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                },
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named("setCatalog");
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return SET_CATALOG_INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                }
+        };
+
+    }
+
+    @Override
+    protected String[] witnessClasses() {
+        return new String[]{"org.mariadb.jdbc.Connection"};
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
new file mode 100644
index 0000000000..b0a3dba6b0
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/DriverInstrumentation.java
@@ -0,0 +1,36 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import 
org.apache.skywalking.apm.plugin.jdbc.define.AbstractDriverInstrumentation;
+
+import static 
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link DriverInstrumentation} presents that skywalking intercepts {@link 
org.mariadb.jdbc.Driver}.
+ */
+public class DriverInstrumentation extends AbstractDriverInstrumentation {
+    private static final String ENHANCE_CLASS = "org.mariadb.jdbc.Driver";
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName(ENHANCE_CLASS);
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
new file mode 100644
index 0000000000..7e036281fb
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementIgnoredSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.plugin.jdbc.PSSetterDefinitionOfJDBCInstrumentation;
+
+public class PreparedStatementIgnoredSetterInstrumentation extends 
PreparedStatementInstrumentation {
+
+    @Override
+    public final InstanceMethodsInterceptPoint[] 
getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[]{
+                new PSSetterDefinitionOfJDBCInstrumentation(true)
+        };
+    }
+
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.java
new file mode 100644
index 0000000000..fced984b0b
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementInstrumentation.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.skywalking.apm.plugin.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static 
org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch.byMultiClassMatch;
+
+public class PreparedStatementInstrumentation extends 
ClassInstanceMethodsEnhancePluginDefine {
+
+    private static final String CLIENT_PREPARED_STATEMENT_CLASS = 
"org.mariadb.jdbc.ClientPreparedStatement";
+    private static final String SERVER_PREPARED_STATEMENT_CLASS = 
"org.mariadb.jdbc.ServerPreparedStatement";
+    private static final String 
PREPARED_STATEMENT_EXECUTE_METHODS_INTERCEPTOR_CLASS = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.PreparedStatementExecuteMethodsInterceptor";
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byMultiClassMatch(
+                CLIENT_PREPARED_STATEMENT_CLASS,
+                SERVER_PREPARED_STATEMENT_CLASS
+        );
+    }
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() 
{
+        return new InstanceMethodsInterceptPoint[]{
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named("execute")
+                                .or(named("executeQuery"))
+                                .or(named("executeUpdate"));
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return 
PREPARED_STATEMENT_EXECUTE_METHODS_INTERCEPTOR_CLASS;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                }
+        };
+
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
new file mode 100644
index 0000000000..30a1865174
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementNullSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.plugin.jdbc.JDBCPreparedStatementNullSetterInstanceMethodsInterceptPoint;
+
+public class PreparedStatementNullSetterInstrumentation extends 
PreparedStatementInstrumentation {
+
+    @Override
+    public final InstanceMethodsInterceptPoint[] 
getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[]{
+                new 
JDBCPreparedStatementNullSetterInstanceMethodsInterceptPoint()
+        };
+    }
+
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
new file mode 100644
index 0000000000..bc625974eb
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/PreparedStatementSetterInstrumentation.java
@@ -0,0 +1,33 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.plugin.jdbc.PSSetterDefinitionOfJDBCInstrumentation;
+
+public class PreparedStatementSetterInstrumentation extends 
PreparedStatementInstrumentation {
+
+    @Override
+    public final InstanceMethodsInterceptPoint[] 
getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[]{
+                new PSSetterDefinitionOfJDBCInstrumentation(false)
+        };
+    }
+
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
new file mode 100644
index 0000000000..13a8c7e033
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/define/StatementInstrumentation.java
@@ -0,0 +1,71 @@
+/*
+ * 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.jdbc.mariadb.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static 
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class StatementInstrumentation extends 
ClassInstanceMethodsEnhancePluginDefine {
+    private static final String MARIADB_STATEMENT_CLASS_NAME = 
"org.mariadb.jdbc.Statement";
+    private static final String STATEMENT_EXECUTE_METHODS_INTERCEPTOR = 
"org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.StatementExecuteMethodsInterceptor";
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() 
{
+        return new InstanceMethodsInterceptPoint[]{
+                new InstanceMethodsInterceptPoint() {
+                    @Override
+                    public ElementMatcher<MethodDescription> 
getMethodsMatcher() {
+                        return named("execute")
+                                .or(named("executeQuery"))
+                                .or(named("executeUpdate"))
+                                .or(named("executeLargeUpdate"))
+                                .or(named("executeBatch"))
+                                .or(named("executeLargeBatch"));
+                    }
+
+                    @Override
+                    public String getMethodsInterceptor() {
+                        return STATEMENT_EXECUTE_METHODS_INTERCEPTOR;
+                    }
+
+                    @Override
+                    public boolean isOverrideArgs() {
+                        return false;
+                    }
+                }
+        };
+    }
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName(MARIADB_STATEMENT_CLASS_NAME);
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
similarity index 52%
copy from 
apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
copy to 
apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
index eda47ffa99..d1bdb703d4 100644
--- 
a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/resources/skywalking-plugin.def
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/main/resources/skywalking-plugin.def
@@ -14,5 +14,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-feign-default-http-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.DefaultHttpClientInstrumentation
-feign-pathvar-9.x=org.apache.skywalking.apm.plugin.feign.http.v9.define.PathVarInstrumentation
\ No newline at end of file
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.DriverInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.ConnectionInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.StatementInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementSetterInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementNullSetterInstrumentation
+mariadb-3.x=org.apache.skywalking.apm.plugin.jdbc.mariadb.v3.define.PreparedStatementIgnoredSetterInstrumentation
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
new file mode 100644
index 0000000000..a034865659
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateCallableStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreateCallableStatementInterceptorTest {
+
+    private static final String SQL = "Select * from test";
+
+    private CreateCallableStatementInterceptor interceptor;
+
+    @Mock
+    private EnhancedInstance ret;
+
+    @Mock
+    private EnhancedInstance objectInstance;
+
+    @Mock
+    private ConnectionInfo connectionInfo;
+
+    @Before
+    public void setUp() {
+        interceptor = new CreateCallableStatementInterceptor();
+
+        
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+    }
+
+    @Test
+    public void testResultIsEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
ret);
+        verify(ret).setSkyWalkingDynamicField(any());
+    }
+
+    @Test
+    public void testResultIsNotEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
new Object());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
new file mode 100644
index 0000000000..0c2c51c9ad
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreatePreparedStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreatePreparedStatementInterceptorTest {
+
+    private static final String SQL = "Select * from test";
+
+    private CreatePreparedStatementInterceptor interceptor;
+
+    @Mock
+    private EnhancedInstance ret;
+
+    @Mock
+    private EnhancedInstance objectInstance;
+
+    @Mock
+    private ConnectionInfo connectionInfo;
+
+    @Before
+    public void setUp() {
+        interceptor = new CreatePreparedStatementInterceptor();
+
+        
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+    }
+
+    @Test
+    public void testResultIsEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
ret);
+        verify(ret).setSkyWalkingDynamicField(any());
+    }
+
+    @Test
+    public void testResultIsNotEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
new Object());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
new file mode 100644
index 0000000000..663ce62d32
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/CreateStatementInterceptorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CreateStatementInterceptorTest {
+
+    private static final String SQL = "Select * from test";
+
+    private CreateStatementInterceptor interceptor;
+
+    @Mock
+    private EnhancedInstance ret;
+
+    @Mock
+    private EnhancedInstance objectInstance;
+
+    @Mock
+    private ConnectionInfo connectionInfo;
+
+    @Before
+    public void setUp() {
+        interceptor = new CreateStatementInterceptor();
+
+        
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(connectionInfo);
+    }
+
+    @Test
+    public void testResultIsEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
ret);
+        verify(ret).setSkyWalkingDynamicField(any());
+    }
+
+    @Test
+    public void testResultIsNotEnhanceInstance() {
+        interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, 
new Object());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
+    }
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
new file mode 100644
index 0000000000..3e624d7952
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/PreparedStatementExecuteMethodsInterceptorTest.java
@@ -0,0 +1,153 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
+import 
org.apache.skywalking.apm.plugin.jdbc.JDBCPreparedStatementSetterInterceptor;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(TracingSegmentRunner.class)
+public class PreparedStatementExecuteMethodsInterceptorTest {
+
+    private static final String SQL = "Select * from test where id = ?";
+
+    @SegmentStoragePoint
+    private SegmentStorage segmentStorage;
+
+    @Rule
+    public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    private PreparedStatementExecuteMethodsInterceptor 
serviceMethodInterceptor;
+
+    private JDBCPreparedStatementSetterInterceptor 
preparedStatementSetterInterceptor;
+
+    @Mock
+    private ConnectionInfo connectionInfo;
+    @Mock
+    private EnhancedInstance objectInstance;
+    @Mock
+    private Method method;
+    private StatementEnhanceInfos enhanceRequireCacheObject;
+
+    @Before
+    public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS = true;
+        preparedStatementSetterInterceptor = new 
JDBCPreparedStatementSetterInterceptor();
+        serviceMethodInterceptor = new 
PreparedStatementExecuteMethodsInterceptor();
+
+        enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, 
SQL, "PreparedStatement");
+        
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(enhanceRequireCacheObject);
+        when(method.getName()).thenReturn("executeQuery");
+        
when(connectionInfo.getComponent()).thenReturn(ComponentsDefine.MARIADB_JDBC);
+        when(connectionInfo.getDBType()).thenReturn("Mariadb");
+        when(connectionInfo.getDatabaseName()).thenReturn("test");
+        when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
+    }
+
+    @After
+    public void clean() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
+        JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS = false;
+    }
+
+    @Test
+    public void testExecutePreparedStatement() throws Throwable {
+        preparedStatementSetterInterceptor.beforeMethod(
+            objectInstance, method, new Object[] {
+                1,
+                "abcd"
+            }, null, null);
+        preparedStatementSetterInterceptor.beforeMethod(
+            objectInstance, method, new Object[] {
+                2,
+                "efgh"
+            }, null, null);
+
+        serviceMethodInterceptor.beforeMethod(objectInstance, method, new 
Object[] {SQL}, null, null);
+        serviceMethodInterceptor.afterMethod(objectInstance, method, new 
Object[] {SQL}, null, null);
+
+        assertThat(segmentStorage.getTraceSegments().size(), is(1));
+        TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+        assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+        AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+        SpanAssert.assertLayer(span, SpanLayer.DB);
+        assertThat(span.getOperationName(), 
is("Mariadb/JDBC/PreparedStatement/executeQuery"));
+        SpanAssert.assertTag(span, 0, "Mariadb");
+        SpanAssert.assertTag(span, 1, "test");
+        SpanAssert.assertTag(span, 2, SQL);
+        SpanAssert.assertTag(span, 3, "[abcd,efgh]");
+    }
+
+    @Test
+    public void testExecutePreparedStatementWithLimitSqlBody() throws 
Throwable {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 10;
+
+        preparedStatementSetterInterceptor.beforeMethod(
+                objectInstance, method, new Object[] {
+                        1,
+                        "abcd"
+                }, null, null);
+        preparedStatementSetterInterceptor.beforeMethod(
+                objectInstance, method, new Object[] {
+                        2,
+                        "efgh"
+                }, null, null);
+
+        serviceMethodInterceptor.beforeMethod(objectInstance, method, new 
Object[] {SQL}, null, null);
+        serviceMethodInterceptor.afterMethod(objectInstance, method, new 
Object[] {SQL}, null, null);
+
+        assertThat(segmentStorage.getTraceSegments().size(), is(1));
+        TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+        assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+        AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+        SpanAssert.assertLayer(span, SpanLayer.DB);
+        assertThat(span.getOperationName(), 
is("Mariadb/JDBC/PreparedStatement/executeQuery"));
+        SpanAssert.assertTag(span, 0, "Mariadb");
+        SpanAssert.assertTag(span, 1, "test");
+        SpanAssert.assertTag(span, 2, "Select * f...");
+        SpanAssert.assertTag(span, 3, "[abcd,efgh]");
+    }
+
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
new file mode 100644
index 0000000000..ce2e83c69a
--- /dev/null
+++ 
b/apm-sniffer/apm-sdk-plugin/mariadb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v3/StatementExecuteMethodsInterceptorTest.java
@@ -0,0 +1,118 @@
+/*
+ * 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.jdbc.mariadb.v3;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
+import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
+import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(TracingSegmentRunner.class)
+public class StatementExecuteMethodsInterceptorTest {
+
+    private static final String SQL = "Select * from test";
+
+    @SegmentStoragePoint
+    private SegmentStorage segmentStorage;
+
+    @Rule
+    public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
+
+    @Mock
+    private ConnectionInfo connectionInfo;
+    @Mock
+    private EnhancedInstance objectInstance;
+    @Mock
+    private Method method;
+    private StatementEnhanceInfos enhanceRequireCacheObject;
+
+    @Before
+    public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
+
+        serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
+
+        enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, 
SQL, "CallableStatement");
+        
when(objectInstance.getSkyWalkingDynamicField()).thenReturn(enhanceRequireCacheObject);
+        when(method.getName()).thenReturn("executeQuery");
+        
when(connectionInfo.getComponent()).thenReturn(ComponentsDefine.MARIADB_JDBC);
+        when(connectionInfo.getDBType()).thenReturn("Mariadb");
+        when(connectionInfo.getDatabaseName()).thenReturn("test");
+        when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
+    }
+
+    @Test
+    public void testExecuteStatement() {
+        serviceMethodInterceptor.beforeMethod(objectInstance, method, new 
Object[]{SQL}, null, null);
+        serviceMethodInterceptor.afterMethod(objectInstance, method, new 
Object[]{SQL}, null, null);
+
+        assertThat(segmentStorage.getTraceSegments().size(), is(1));
+        TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+        assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+        AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+        SpanAssert.assertLayer(span, SpanLayer.DB);
+        assertThat(span.getOperationName(), 
is("Mariadb/JDBC/CallableStatement/executeQuery"));
+        SpanAssert.assertTag(span, 0, "Mariadb");
+        SpanAssert.assertTag(span, 1, "test");
+        SpanAssert.assertTag(span, 2, SQL);
+    }
+
+    @Test
+    public void testExecuteStatementWithLimitSqlBody() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 10;
+        serviceMethodInterceptor.beforeMethod(objectInstance, method, new 
Object[]{SQL}, null, null);
+        serviceMethodInterceptor.afterMethod(objectInstance, method, new 
Object[]{SQL}, null, null);
+
+        assertThat(segmentStorage.getTraceSegments().size(), is(1));
+        TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+        assertThat(SegmentHelper.getSpans(segment).size(), is(1));
+        AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
+        SpanAssert.assertLayer(span, SpanLayer.DB);
+        assertThat(span.getOperationName(), 
is("Mariadb/JDBC/CallableStatement/executeQuery"));
+        SpanAssert.assertTag(span, 0, "Mariadb");
+        SpanAssert.assertTag(span, 1, "test");
+        SpanAssert.assertTag(span, 2, "Select * f...");
+    }
+
+}
diff --git 
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
 
b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
index 1dcdb288f8..8fec2f8f4b 100644
--- 
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
+++ 
b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
@@ -35,7 +35,7 @@ public class MongoRemotePeerHelper {
      */
     public static String getRemotePeer(Cluster cluster) {
         StringBuilder peersBuilder = new StringBuilder();
-        for (ServerDescription description : 
cluster.getDescription().getServerDescriptions()) {
+        for (ServerDescription description : 
cluster.getCurrentDescription().getServerDescriptions()) {
             ServerAddress address = description.getAddress();
             
peersBuilder.append(address.getHost()).append(":").append(address.getPort()).append(";");
         }
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml 
b/apm-sniffer/apm-sdk-plugin/pom.xml
index 1c792ed425..fca054b6a5 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -92,6 +92,7 @@
         <module>finagle-6.25.x-plugin</module>
         <module>quasar-plugin</module>
         <module>mariadb-2.x-plugin</module>
+        <module>mariadb-3.x-plugin</module>
         <module>influxdb-2.x-plugin</module>
         <module>baidu-brpc-plugin</module>
         <module>baidu-brpc-3.x-plugin</module>
diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md 
b/docs/en/setup/service-agent/java-agent/Plugin-list.md
index 3764ae9716..a829e1a174 100644
--- a/docs/en/setup/service-agent/java-agent/Plugin-list.md
+++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md
@@ -64,6 +64,7 @@
 - lettuce-6.5.x
 - light4j
 - mariadb-2.x
+- mariadb-3.x
 - micrometer-1.10.x
 - memcache-2.x
 - mongodb-2.x
diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md 
b/docs/en/setup/service-agent/java-agent/Supported-list.md
index bbc7da6940..a875618a02 100644
--- a/docs/en/setup/service-agent/java-agent/Supported-list.md
+++ b/docs/en/setup/service-agent/java-agent/Supported-list.md
@@ -28,7 +28,7 @@ metrics based on the tracing data.
   * [Netty HTTP](https://github.com/netty/netty) 4.1.x (Optional²)
   * [Solon](https://github.com/opensolon/solon) 2.7.x -> 2.8.x
 * HTTP Client
-  * [Feign](https://github.com/OpenFeign/feign) 9.x -> 12.1
+  * [Feign](https://github.com/OpenFeign/feign) 9.x -> 13.5
   * [Netflix Spring Cloud 
Feign](https://github.com/spring-cloud/spring-cloud-openfeign) 1.1.x -> 2.x
   * [Okhttp](https://github.com/square/okhttp) 2.x -> 3.x -> 4.x
   * [Apache httpcomponent HttpClient](http://hc.apache.org/) 2.0 -> 3.1, 4.2, 
4.3, 5.0, 5.1
@@ -50,7 +50,7 @@ metrics based on the tracing data.
   * H2 Driver 1.3.x -> 1.4.x
   * [ShardingSphere](https://github.com/apache/shardingsphere) 3.0.0, 4.0.0, 
4.0.1, 4.1.0, 4.1.1, 5.0.0
   * PostgreSQL Driver 8.x, 9.x, 42.x
-  * Mariadb Driver 1.8, 2.x (2.0 -> 2.7)
+  * Mariadb Driver 1.8, 2.x (2.0 -> 2.7), 3.x (3.0 -> 3.5)
   * [InfluxDB](https://github.com/influxdata/influxdb-java) 2.5 -> 2.17
   * [Mssql-Jtds](https://github.com/milesibastos/jTDS) 1.x
   * [Mssql-jdbc](https://github.com/microsoft/mssql-jdbc) 6.x -> 8.x
@@ -91,7 +91,7 @@ metrics based on the tracing data.
     * [Jedis](https://github.com/xetorthio/jedis) 2.x-4.x
     * [Redisson](https://github.com/redisson/redisson) Easy Java Redis client 
3.5.0 -> 3.30.0 
     * [Lettuce](https://github.com/lettuce-io/lettuce-core) 5.x -> 6.7.1
-  * [MongoDB Java Driver](https://github.com/mongodb/mongo-java-driver) 
2.13-2.14, 3.4.0-3.12.7, 4.0.0-4.10.2
+  * [MongoDB Java Driver](https://github.com/mongodb/mongo-java-driver) 
2.13-2.14, 3.4.0-3.12.7, 4.0.0-4.11.5
   * Memcached Client
     * [Spymemcached](https://github.com/couchbase/spymemcached) 2.x
     * [Xmemcached](https://github.com/killme2008/xmemcached) 2.x
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list 
b/test/plugin/scenarios/feign-scenario/support-version.list
index eb3667e110..60e6621427 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/feign-scenario/support-version.list
@@ -23,3 +23,5 @@
 10.12
 11.10
 12.1
+12.5
+13.5
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list 
b/test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
similarity index 87%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
index eb3667e110..a7a67d27ab 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/bin/startup.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+#
 # 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
@@ -14,12 +16,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+home="$(cd "$(dirname $0)"; pwd)"
+
+java -jar ${agent_opts} ${home}/../libs/mariadb-3.x-scenario.jar &
\ No newline at end of file
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml 
b/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml
new file mode 100644
index 0000000000..9f2a81315d
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/config/expectedData.yaml
@@ -0,0 +1,114 @@
+# 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.
+segmentItems:
+- serviceName: mariadb-3.x-scenario
+  segmentSize: ge 1
+  segments:
+  - segmentId: not null
+    spans:
+    - operationName: Mariadb/JDBC/Statement/execute
+      parentSpanId: 0
+      spanId: 1
+      spanLayer: Database
+      startTime: nq 0
+      endTime: nq 0
+      componentId: 87
+      isError: false
+      spanType: Exit
+      peer: mariadb-server:3306
+      skipAnalysis: 'false'
+      tags:
+      - {key: db.type, value: Mariadb}
+      - {key: db.instance, value: test}
+      - key: db.statement
+        value: "CREATE TABLE test_table(\nid VARCHAR(1) PRIMARY KEY, \nvalue 
VARCHAR(10)\
+          \ NOT NULL)"
+    - operationName: Mariadb/JDBC/PreparedStatement/execute
+      parentSpanId: 0
+      spanId: 2
+      spanLayer: Database
+      startTime: nq 0
+      endTime: nq 0
+      componentId: 87
+      isError: false
+      spanType: Exit
+      peer: mariadb-server:3306
+      skipAnalysis: 'false'
+      tags:
+      - {key: db.type, value: Mariadb}
+      - {key: db.instance, value: test}
+      - {key: db.statement, value: "INSERT INTO test_table(id, value) 
VALUES(?,?)"}
+    - operationName: Mariadb/JDBC/PreparedStatement/execute
+      parentSpanId: 0
+      spanId: 3
+      spanLayer: Database
+      startTime: nq 0
+      endTime: nq 0
+      componentId: 87
+      isError: false
+      spanType: Exit
+      peer: mariadb-server:3306
+      skipAnalysis: 'false'
+      tags:
+      - {key: db.type, value: Mariadb}
+      - {key: db.instance, value: test}
+      - {key: db.statement, value: "SELECT id, value FROM test_table WHERE id 
= ?"}
+    - operationName: Mariadb/JDBC/Statement/execute
+      parentSpanId: 0
+      spanId: 4
+      spanLayer: Database
+      startTime: nq 0
+      endTime: nq 0
+      componentId: 87
+      isError: false
+      spanType: Exit
+      peer: mariadb-server:3306
+      skipAnalysis: 'false'
+      tags:
+      - {key: db.type, value: Mariadb}
+      - {key: db.instance, value: test}
+      - {key: db.statement, value: "DROP table test_table"}
+    - operationName: Mariadb/JDBC/Connection/close
+      parentSpanId: 0
+      spanId: 5
+      spanLayer: Database
+      startTime: nq 0
+      endTime: nq 0
+      componentId: 87
+      isError: false
+      spanType: Exit
+      peer: mariadb-server:3306
+      skipAnalysis: 'false'
+      tags:
+      - {key: db.type, value: Mariadb}
+      - {key: db.instance, value: test}
+      - {key: db.statement, value: ''}
+    - operationName: GET:/mariadb-3.x-scenario/case/mariadb-scenario
+      parentSpanId: -1
+      spanId: 0
+      startTime: nq 0
+      endTime: nq 0
+      spanLayer: Http
+      isError: false
+      spanType: Entry
+      peer: ''
+      componentId: 1
+      tags:
+      - {key: url, value: 
'http://localhost:8080/mariadb-3.x-scenario/case/mariadb-scenario'}
+      - {key: http.method, value: GET}
+      - {key: http.status_code, value: '200'}
+      logs: []
+      skipAnalysis: 'false'
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list 
b/test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
similarity index 64%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
index eb3667e110..cebb701abb 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/configuration.yml
@@ -14,12 +14,19 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+type: jvm
+entryService: http://localhost:8080/mariadb-3.x-scenario/case/mariadb-scenario
+healthCheck: http://localhost:8080/mariadb-3.x-scenario/case/healthCheck
+startScript: ./bin/startup.sh
+environment:
+depends_on:
+  - mariadb-server
+dependencies:
+  mariadb-server:
+    image: mariadb:10.5.2
+    hostname: mariadb-server
+    expose:
+      - "3306"
+    environment:
+      - MYSQL_ROOT_PASSWORD=root
+      - MYSQL_DATABASE=test
diff --git a/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml 
b/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml
new file mode 100644
index 0000000000..b8c31cd066
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/pom.xml
@@ -0,0 +1,123 @@
+<?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";>
+
+    <groupId>org.apache.skywalking.apm.testcase</groupId>
+    <artifactId>mariadb-3.x-scenario</artifactId>
+    <version>1.0.0</version>
+    <packaging>jar</packaging>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <compiler.version>1.8</compiler.version>
+        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+
+        <test.framework.version>3.5.1</test.framework.version>
+        <docker.image.version>${test.framework.version}</docker.image.version>
+
+        <spring.boot.version>2.1.6.RELEASE</spring.boot.version>
+    </properties>
+
+    <name>skywalking-mariadb-3.x-scenario</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring.boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${test.framework.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>mariadb-3.x-scenario</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring.boot.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${compiler.version}</source>
+                    <target>${compiler.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>assemble</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <configuration>
+                            <descriptors>
+                                
<descriptor>src/main/assembly/assembly.xml</descriptor>
+                            </descriptors>
+                            <outputDirectory>./target/</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml
new file mode 100644
index 0000000000..80cf6eba69
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/assembly/assembly.xml
@@ -0,0 +1,41 @@
+<?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.
+  ~
+  -->
+<assembly
+    
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
 http://maven.apache.org/xsd/assembly-1.1.2.xsd";>
+    <formats>
+        <format>zip</format>
+    </formats>
+
+    <fileSets>
+        <fileSet>
+            <directory>./bin</directory>
+            <fileMode>0775</fileMode>
+        </fileSet>
+    </fileSets>
+
+    <files>
+        <file>
+            
<source>${project.build.directory}/mariadb-3.x-scenario.jar</source>
+            <outputDirectory>./libs</outputDirectory>
+            <fileMode>0775</fileMode>
+        </file>
+    </files>
+</assembly>
diff --git 
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
similarity index 50%
copy from 
apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
copy to 
test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
index 1dcdb288f8..ad8ed130c2 100644
--- 
a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v4/support/MongoRemotePeerHelper.java
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/Application.java
@@ -16,29 +16,24 @@
  *
  */
 
-package org.apache.skywalking.apm.plugin.mongodb.v4.support;
+package org.apache.skywalking.apm.testcase.mariadb;
 
-import com.mongodb.ServerAddress;
-import com.mongodb.connection.ServerDescription;
-import com.mongodb.internal.connection.Cluster;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
 
-@SuppressWarnings("deprecation")
-public class MongoRemotePeerHelper {
+@SpringBootApplication
+public class Application {
 
-    private MongoRemotePeerHelper() {
-    }
+    private static final Logger LOGGER = 
LogManager.getLogger(Application.class);
 
-    /**
-     * 
-     * @param cluster cluster
-     * @return result
-     */
-    public static String getRemotePeer(Cluster cluster) {
-        StringBuilder peersBuilder = new StringBuilder();
-        for (ServerDescription description : 
cluster.getDescription().getServerDescriptions()) {
-            ServerAddress address = description.getAddress();
-            
peersBuilder.append(address.getHost()).append(":").append(address.getPort()).append(";");
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(Application.class, args);
+        } catch (Exception ex) {
+            LOGGER.error("Application start error", ex);
+            throw ex;
         }
-        return peersBuilder.substring(0, peersBuilder.length() - 1);
     }
 }
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
new file mode 100644
index 0000000000..7eb8a6b1cb
--- /dev/null
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/MariadbConfig.java
@@ -0,0 +1,58 @@
+/*
+ * 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.testcase.mariadb;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class MariadbConfig {
+    private static final Logger LOGGER = 
LogManager.getLogger(MariadbConfig.class);
+    private static String URL;
+    private static String USER_NAME;
+    private static String PASSWORD;
+
+    static {
+        InputStream inputStream = 
MariadbConfig.class.getClassLoader().getResourceAsStream("/jdbc.properties");
+        Properties properties = new Properties();
+        try {
+            properties.load(inputStream);
+        } catch (IOException e) {
+            LOGGER.error("Failed to load config", e);
+        }
+
+        URL = properties.getProperty("mariadb.url");
+        USER_NAME = properties.getProperty("mariadb.username");
+        PASSWORD = properties.getProperty("mariadb.password");
+    }
+
+    public static String getUrl() {
+        return URL;
+    }
+
+    public static String getUserName() {
+        return USER_NAME;
+    }
+
+    public static String getPassword() {
+        return PASSWORD;
+    }
+}
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.java
 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.java
new file mode 100644
index 0000000000..74b7ffbad4
--- /dev/null
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/SQLExecutor.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.skywalking.apm.testcase.mariadb;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class SQLExecutor implements AutoCloseable {
+    private static final Logger LOGGER = 
LogManager.getLogger(SQLExecutor.class);
+    private Connection connection;
+
+    public SQLExecutor() throws SQLException {
+        try {
+            Class.forName("org.mariadb.jdbc.Driver");
+        } catch (ClassNotFoundException ex) {
+            LOGGER.error(ex);
+        }
+        connection = DriverManager.getConnection(MariadbConfig.getUrl(), 
MariadbConfig.getUserName(), MariadbConfig.getPassword());
+    }
+
+    public void execute(String sql) throws SQLException {
+        Statement statement = connection.createStatement();
+        statement.execute(sql);
+    }
+
+    public void insertData(String sql, String id, String value) throws 
SQLException {
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1, id);
+        preparedStatement.setString(2, value);
+        preparedStatement.execute();
+    }
+
+    public void queryData(String sql, String id) throws SQLException {
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1, id);
+        preparedStatement.execute();
+    }
+
+    public void closeConnection() throws SQLException {
+        if (this.connection != null) {
+            this.connection.close();
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        closeConnection();
+    }
+}
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.java
 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.java
new file mode 100644
index 0000000000..7f6638bd7d
--- /dev/null
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/mariadb/controller/CaseController.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.skywalking.apm.testcase.mariadb.controller;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.skywalking.apm.testcase.mariadb.SQLExecutor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/case")
+public class CaseController {
+
+    private static final Logger LOGGER = 
LogManager.getLogger(CaseController.class);
+
+    private static final String SUCCESS = "Success";
+
+    private static final String CREATE_TABLE_SQL = "CREATE TABLE 
test_table(\n" + "id VARCHAR(1) PRIMARY KEY, \n" + "value VARCHAR(10) NOT 
NULL)";
+    private static final String INSERT_DATA_SQL = "INSERT INTO test_table(id, 
value) VALUES(?,?)";
+    private static final String QUERY_DATA_SQL = "SELECT id, value FROM 
test_table WHERE id = ?";
+    private static final String DELETE_DATA_SQL = "DELETE FROM test_table 
WHERE id=?";
+    private static final String DROP_TABLE_SQL = "DROP table test_table";
+
+    @RequestMapping("/mariadb-scenario")
+    @ResponseBody
+    public String testcase() throws Exception {
+        try (SQLExecutor sqlExecute = new SQLExecutor()) {
+            sqlExecute.execute(CREATE_TABLE_SQL);
+            sqlExecute.insertData(INSERT_DATA_SQL, "1", "value");
+            sqlExecute.queryData(QUERY_DATA_SQL, "1");
+            sqlExecute.execute(DROP_TABLE_SQL);
+        } catch (Exception ex) {
+            LOGGER.error("Failed to execute sql.", ex);
+            throw ex;
+        }
+        return SUCCESS;
+    }
+
+    @RequestMapping("/healthCheck")
+    @ResponseBody
+    public String healthCheck() throws Exception {
+        return SUCCESS;
+    }
+
+}
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
new file mode 100644
index 0000000000..5045bd899a
--- /dev/null
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/application.yaml
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+#
+server:
+  port: 8080
+  servlet:
+    context-path: /mariadb-3.x-scenario
+logging:
+  config: classpath:log4j2.xml
diff --git a/test/plugin/scenarios/feign-scenario/support-version.list 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
similarity index 89%
copy from test/plugin/scenarios/feign-scenario/support-version.list
copy to 
test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
index eb3667e110..4b7d7ad333 100644
--- a/test/plugin/scenarios/feign-scenario/support-version.list
+++ 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/jdbc.properties
@@ -13,13 +13,6 @@
 # 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.
-
-9.0.0
-9.1.0
-9.2.0
-9.3.1
-9.4.0
-9.5.1
-10.12
-11.10
-12.1
+mariadb.url=jdbc:mariadb://mariadb-server:3306/test
+mariadb.username=root
+mariadb.password=root
diff --git 
a/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml 
b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..b5cda5ae8a
--- /dev/null
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/src/main/resources/log4j2.xml
@@ -0,0 +1,30 @@
+<?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.
+  ~
+  -->
+<Configuration status="WARN">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_ERR">
+            <PatternLayout charset="UTF-8" pattern="[%d{yyyy-MM-dd 
HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root level="WARN">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git 
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list 
b/test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
similarity index 95%
copy from 
test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
copy to test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
index 99dbebec49..de41a47025 100644
--- 
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
+++ b/test/plugin/scenarios/mariadb-3.x-scenario/support-version.list
@@ -14,7 +14,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-9.4.1212
-42.0.0
-42.1.4
-42.2.8
+3.0.11
+3.1.4
+3.2.0
+3.3.4
+3.4.1
+3.5.1
+
diff --git a/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list 
b/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
index d48bca9d2d..42c7e89fb5 100644
--- a/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
+++ b/test/plugin/scenarios/mongodb-4.x-scenario/support-version.list
@@ -24,4 +24,5 @@
 4.7.2
 4.8.2
 4.9.1
-4.10.2
\ No newline at end of file
+4.10.2
+4.11.5
\ No newline at end of file
diff --git 
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list 
b/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
index 99dbebec49..3aa745581d 100644
--- 
a/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
+++ 
b/test/plugin/scenarios/postgresql-above9.4.1207-scenario/support-version.list
@@ -14,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-9.4.1212
 42.0.0
 42.1.4
 42.2.8

Reply via email to