diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
index ba193c12c..bdcd5b7f4 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
@@ -44,7 +44,7 @@ public class LocalBuriedPointSender extends ApplicationExceptionHandler implemen
if (Config.BuriedPoint.PRINTF) {
logger.debug("TraceId:" + spanData.getTraceId() + "\tviewpointId:" + spanData.getViewPointId() + "\tParentLevelId:" + spanData.
- getParentLevel() + "\tLevelId:" + spanData.getLevelId());
+ getParentLevel() + "\tLevelId:" + spanData.getLevelId() + "\tbusinessKey:" + spanData.getBusinessKey());
}
// 存放到本地发送进程中
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
index 5f542a023..c382a9756 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
@@ -1,7 +1,6 @@
package com.ai.cloud.skywalking.plugin;
import java.net.URL;
-import java.util.Enumeration;
import java.util.List;
import org.apache.logging.log4j.LogManager;
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginCfg.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginCfg.java
index 229d6dbfb..2e0070db6 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginCfg.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginCfg.java
@@ -19,10 +19,10 @@ public class PluginCfg {
void load(InputStream input) throws IOException{
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
- String nhanceOriginClassName = null;
- while((nhanceOriginClassName = reader.readLine()) != null){
- if(!StringUtil.isEmpty(nhanceOriginClassName)){
- interceptorClassList.add(nhanceOriginClassName.trim());
+ String interceptorDefineClassName = null;
+ while((interceptorDefineClassName = reader.readLine()) != null){
+ if(!StringUtil.isEmpty(interceptorDefineClassName)){
+ interceptorClassList.add(interceptorDefineClassName.trim());
}
}
}finally{
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java
index ca0602902..787a3b9bc 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java
@@ -48,7 +48,15 @@ public class ClassMethodInterceptor {
Object ret = null;
try {
ret = zuper.call();
- } finally {
+ } catch(Throwable t){
+ try {
+ interceptor.handleMethodException(t, instanceContext, interceptorContext, ret);
+ throw t;
+ } catch (Throwable t2) {
+ logger.error("class[{}] handle method[{}] exception failue:{}",
+ obj.getClass(), method.getName(), t2.getMessage(), t2);
+ }
+ }finally {
try {
ret = interceptor.afterMethod(instanceContext, interceptorContext, ret);
} catch (Throwable t) {
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
index d9c3a5e5f..6f91afd59 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
@@ -2,6 +2,8 @@ package com.ai.cloud.skywalking.plugin.interceptor;
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import java.util.Set;
@@ -80,8 +82,8 @@ public class EnhanceClazz4Interceptor {
* 1.add field '_$EnhancedClassInstanceContext' of type
* EnhancedClassInstanceContext
*
- * 2.intercept constructor by default, and intercept method which it's required by
- * interceptorDefineClass.
+ * 2.intercept constructor by default, and intercept method which it's
+ * required by interceptorDefineClass.
*/
IAroundInterceptor interceptor = define.instance();
@@ -90,7 +92,7 @@ public class EnhanceClazz4Interceptor {
newClassBuilder = newClassBuilder
.defineField(contextAttrName,
EnhancedClassInstanceContext.class)
- .constructor(isConstructor())
+ .constructor(any())
.intercept(
SuperMethodCall.INSTANCE.andThen(MethodDelegation.to(
new ClassConstructorInterceptor(interceptor))
@@ -99,12 +101,27 @@ public class EnhanceClazz4Interceptor {
FieldGetter.class,
FieldSetter.class))));
- String[] methodNameList = define.getBeInterceptedMethods();
- for (String methodName : methodNameList) {
- newClassBuilder = newClassBuilder.method(named(methodName))
- .intercept(
- MethodDelegation.to(new ClassMethodInterceptor(
- interceptor)));
+ InterceptPoint[] methodNameList = define.getBeInterceptedMethods();
+ ClassMethodInterceptor classMethodInterceptor = new ClassMethodInterceptor(
+ interceptor);
+ for (InterceptPoint method : methodNameList) {
+ logger.debug("prepare to enhance class {} method [{}] ",
+ enhanceOriginClassName, method.getMethodName());
+ if (method.getArgTypeArray() != null) {
+ newClassBuilder = newClassBuilder.method(
+ named(method.getMethodName()).and(
+ takesArguments(method.getArgTypeArray()))).intercept(
+ MethodDelegation.to(classMethodInterceptor));
+ } else if (method.getArgNum() > -1) {
+ newClassBuilder = newClassBuilder.method(
+ named(method.getMethodName()).and(
+ takesArguments(method.getArgNum()))).intercept(
+ MethodDelegation.to(classMethodInterceptor));
+ } else {
+ newClassBuilder = newClassBuilder.method(
+ named(method.getMethodName())).intercept(
+ MethodDelegation.to(classMethodInterceptor));
+ }
}
/**
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java
index c0a3d1b8a..0cca5ea13 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java
@@ -7,5 +7,5 @@ public interface IAroundInterceptor {
public Object afterMethod(EnhancedClassInstanceContext context, MethodInvokeContext interceptorContext, Object ret);
-
+ public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, MethodInvokeContext interceptorContext, Object ret);
}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptPoint.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptPoint.java
new file mode 100644
index 000000000..eec8b9363
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptPoint.java
@@ -0,0 +1,45 @@
+package com.ai.cloud.skywalking.plugin.interceptor;
+
+
+public class InterceptPoint {
+ private String methodName;
+
+ private int argNum = -1;
+
+ private Class>[] argTypeArray;
+
+ public InterceptPoint(String methodName) {
+ super();
+ this.methodName = methodName;
+ }
+
+ public InterceptPoint(String methodName, int argNum) {
+ this(methodName);
+ this.argNum = argNum;
+ }
+
+ public InterceptPoint(String methodName, Class>... args) {
+ this(methodName);
+ this.argTypeArray = args;
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+
+ public int getArgNum() {
+ return argNum;
+ }
+
+ public Class>[] getArgTypeArray() {
+ return argTypeArray;
+ }
+
+ public void setArgNum(int argNum) {
+ this.argNum = argNum;
+ }
+
+ public void setArgTypeList(Class>... args){
+ argTypeArray = args;
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java
index 948c75906..0953c50d3 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java
@@ -13,7 +13,7 @@ public interface InterceptorDefine {
*
* @return
*/
- public String[] getBeInterceptedMethods();
+ public InterceptPoint[] getBeInterceptedMethods();
/**
* 返回增强拦截器的实现
diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
index fd67b5759..9455dbae0 100644
--- a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
+++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
@@ -15,10 +15,11 @@ public class PluginMainTest {
.main(new String[] { "test.ai.cloud.plugin.PluginMainTest" });
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
long start = System.currentTimeMillis();
- BeInterceptedClass inst = new BeInterceptedClass();
+
+ BeInterceptedClass inst = (BeInterceptedClass) Class.forName("test.ai.cloud.plugin.BeInterceptedClass").newInstance();
inst.printabc();
long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java
index 9fc05a636..8004c0723 100644
--- a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java
+++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java
@@ -24,4 +24,11 @@ public class TestAroundInterceptor implements IAroundInterceptor {
return ret;
}
+ @Override
+ public void handleMethodException(Throwable t, EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext, Object ret) {
+ // TODO Auto-generated method stub
+
+ }
+
}
diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java
index eacf32118..14b863daa 100644
--- a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java
+++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java
@@ -1,6 +1,7 @@
package test.ai.cloud.plugin;
import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor;
+import com.ai.cloud.skywalking.plugin.interceptor.InterceptPoint;
import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine;
public class TestInterceptorDefine implements InterceptorDefine {
@@ -11,8 +12,8 @@ public class TestInterceptorDefine implements InterceptorDefine {
}
@Override
- public String[] getBeInterceptedMethods() {
- return new String[] { "printabc" };
+ public InterceptPoint[] getBeInterceptedMethods() {
+ return new InterceptPoint[] { new InterceptPoint("printabc") };
}
@Override
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWConnection.java b/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWConnection.java
deleted file mode 100644
index a52054466..000000000
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWConnection.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
-
-import java.sql.Array;
-import java.sql.Blob;
-import java.sql.CallableStatement;
-import java.sql.Clob;
-import java.sql.DatabaseMetaData;
-import java.sql.NClob;
-import java.sql.PreparedStatement;
-import java.sql.SQLClientInfoException;
-import java.sql.SQLException;
-import java.sql.SQLWarning;
-import java.sql.SQLXML;
-import java.sql.Savepoint;
-import java.sql.Statement;
-import java.sql.Struct;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.Executor;
-
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.ConnectionTracing;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.ConnectionTracing.Executable;
-
-public class SWConnection implements java.sql.Connection {
- private String connectInfo;
-
- private final java.sql.Connection realConnection;
-
- public SWConnection(String url, Properties info,
- java.sql.Connection realConnection) {
- super();
- this.connectInfo = url + "(" + info.getProperty("user") + ")";
- this.realConnection = realConnection;
- }
-
- public T unwrap(Class iface) throws SQLException {
- return realConnection.unwrap(iface);
- }
-
- public boolean isWrapperFor(Class> iface) throws SQLException {
- return realConnection.isWrapperFor(iface);
- }
-
- public Statement createStatement() throws SQLException {
- return new SWStatement(this, realConnection.createStatement(),
- this.connectInfo);
- }
-
- public PreparedStatement prepareStatement(String sql) throws SQLException {
- return new SWPreparedStatement(this,
- realConnection.prepareStatement(sql), this.connectInfo, sql);
- }
-
- public CallableStatement prepareCall(String sql) throws SQLException {
- return new SWCallableStatement(this, realConnection.prepareCall(sql),
- this.connectInfo, sql);
- }
-
- public String nativeSQL(String sql) throws SQLException {
- return ConnectionTracing.execute(realConnection, connectInfo,
- "nativeSQL", sql, new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- return realConnection.nativeSQL(sql);
- }
- });
- }
-
- public void setAutoCommit(boolean autoCommit) throws SQLException {
- realConnection.setAutoCommit(autoCommit);
- }
-
- public boolean getAutoCommit() throws SQLException {
- return realConnection.getAutoCommit();
- }
-
- public void commit() throws SQLException {
- ConnectionTracing.execute(realConnection, connectInfo, "commit", "",
- new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- realConnection.commit();
- return null;
- }
- });
- }
-
- public void rollback() throws SQLException {
- ConnectionTracing.execute(realConnection, connectInfo, "rollback", "",
- new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- realConnection.rollback();
- return null;
- }
- });
- }
-
- public void close() throws SQLException {
- ConnectionTracing.execute(realConnection, connectInfo, "close", "",
- new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- realConnection.close();
- return null;
- }
- });
- }
-
- public boolean isClosed() throws SQLException {
- return realConnection.isClosed();
- }
-
- public DatabaseMetaData getMetaData() throws SQLException {
- return realConnection.getMetaData();
- }
-
- public void setReadOnly(boolean readOnly) throws SQLException {
- realConnection.setReadOnly(readOnly);
- }
-
- public boolean isReadOnly() throws SQLException {
- return realConnection.isReadOnly();
- }
-
- public void setCatalog(String catalog) throws SQLException {
- realConnection.setCatalog(catalog);
- }
-
- public String getCatalog() throws SQLException {
- return realConnection.getCatalog();
- }
-
- public void setTransactionIsolation(int level) throws SQLException {
- realConnection.setTransactionIsolation(level);
- }
-
- public int getTransactionIsolation() throws SQLException {
- return realConnection.getTransactionIsolation();
- }
-
- public SQLWarning getWarnings() throws SQLException {
- return realConnection.getWarnings();
- }
-
- public void clearWarnings() throws SQLException {
- realConnection.clearWarnings();
- }
-
- public Statement createStatement(int resultSetType, int resultSetConcurrency)
- throws SQLException {
- return new SWStatement(this, realConnection.createStatement(
- resultSetType, resultSetConcurrency), this.connectInfo);
- }
-
- public PreparedStatement prepareStatement(String sql, int resultSetType,
- int resultSetConcurrency) throws SQLException {
- return new SWPreparedStatement(this, realConnection.prepareStatement(
- sql, resultSetType, resultSetConcurrency), this.connectInfo,
- sql);
- }
-
- public CallableStatement prepareCall(String sql, int resultSetType,
- int resultSetConcurrency) throws SQLException {
- return new SWCallableStatement(this, realConnection.prepareCall(sql,
- resultSetType, resultSetConcurrency), this.connectInfo, sql);
- }
-
- public Map> getTypeMap() throws SQLException {
- return realConnection.getTypeMap();
- }
-
- public void setTypeMap(Map> map) throws SQLException {
- realConnection.setTypeMap(map);
- }
-
- public void setHoldability(int holdability) throws SQLException {
- realConnection.setHoldability(holdability);
- }
-
- public int getHoldability() throws SQLException {
- return realConnection.getHoldability();
- }
-
- public Savepoint setSavepoint() throws SQLException {
- return realConnection.setSavepoint();
- }
-
- public Savepoint setSavepoint(String name) throws SQLException {
- return realConnection.setSavepoint(name);
- }
-
- public void rollback(final Savepoint savepoint) throws SQLException {
- ConnectionTracing.execute(realConnection, connectInfo,
- "rollback to savepoint", "", new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- realConnection.rollback(savepoint);
- return null;
- }
- });
- }
-
- public void releaseSavepoint(final Savepoint savepoint) throws SQLException {
- ConnectionTracing.execute(realConnection, connectInfo,
- "releaseSavepoint savepoint", "", new Executable() {
- public String exe(java.sql.Connection realConnection,
- String sql) throws SQLException {
- realConnection.releaseSavepoint(savepoint);
- return null;
- }
- });
- }
-
- public Statement createStatement(int resultSetType,
- int resultSetConcurrency, int resultSetHoldability)
- throws SQLException {
- return new SWStatement(this, realConnection.createStatement(
- resultSetType, resultSetConcurrency, resultSetHoldability),
- this.connectInfo);
- }
-
- public PreparedStatement prepareStatement(String sql, int resultSetType,
- int resultSetConcurrency, int resultSetHoldability)
- throws SQLException {
- return new SWPreparedStatement(this,
- realConnection.prepareStatement(sql, resultSetType,
- resultSetConcurrency, resultSetHoldability),
- this.connectInfo, sql);
- }
-
- public CallableStatement prepareCall(String sql, int resultSetType,
- int resultSetConcurrency, int resultSetHoldability)
- throws SQLException {
- return new SWCallableStatement(this, realConnection.prepareCall(sql,
- resultSetType, resultSetConcurrency, resultSetHoldability), this.connectInfo, sql);
- }
-
- public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
- throws SQLException {
- return new SWPreparedStatement(this, realConnection.prepareStatement(
- sql, autoGeneratedKeys), this.connectInfo, sql);
- }
-
- public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
- throws SQLException {
- return new SWPreparedStatement(this, realConnection.prepareStatement(
- sql, columnIndexes), this.connectInfo, sql);
- }
-
- public PreparedStatement prepareStatement(String sql, String[] columnNames)
- throws SQLException {
- return new SWPreparedStatement(this, realConnection.prepareStatement(
- sql, columnNames), this.connectInfo, sql);
- }
-
- public Clob createClob() throws SQLException {
- return realConnection.createClob();
- }
-
- public Blob createBlob() throws SQLException {
- return realConnection.createBlob();
- }
-
- public NClob createNClob() throws SQLException {
- return realConnection.createNClob();
- }
-
- public SQLXML createSQLXML() throws SQLException {
- return realConnection.createSQLXML();
- }
-
- public boolean isValid(int timeout) throws SQLException {
- return realConnection.isValid(timeout);
- }
-
- public void setClientInfo(String name, String value)
- throws SQLClientInfoException {
- realConnection.setClientInfo(name, value);
- }
-
- public void setClientInfo(Properties properties)
- throws SQLClientInfoException {
- realConnection.setClientInfo(properties);
- }
-
- public String getClientInfo(String name) throws SQLException {
- return realConnection.getClientInfo(name);
- }
-
- public Properties getClientInfo() throws SQLException {
- return realConnection.getClientInfo();
- }
-
- public Array createArrayOf(String typeName, Object[] elements)
- throws SQLException {
- return realConnection.createArrayOf(typeName, elements);
- }
-
- public Struct createStruct(String typeName, Object[] attributes)
- throws SQLException {
- return realConnection.createStruct(typeName, attributes);
- }
-
- public void setSchema(String schema) throws SQLException {
- realConnection.setSchema(schema);
- }
-
- public String getSchema() throws SQLException {
- return realConnection.getSchema();
- }
-
- public void abort(Executor executor) throws SQLException {
- realConnection.abort(executor);
- }
-
- public void setNetworkTimeout(Executor executor, int milliseconds)
- throws SQLException {
- realConnection.setNetworkTimeout(executor, milliseconds);
- }
-
- public int getNetworkTimeout() throws SQLException {
- return realConnection.getNetworkTimeout();
- }
-
-}
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/TracingDriver.java b/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/TracingDriver.java
deleted file mode 100644
index 3433e6e34..000000000
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/TracingDriver.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
-
-import java.sql.Driver;
-import java.sql.DriverPropertyInfo;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.util.Properties;
-import java.util.logging.Logger;
-
-import com.ai.cloud.skywalking.conf.AuthDesc;
-
-public abstract class TracingDriver implements Driver {
- private static final String TRACING_SIGN = "tracing:";
-
- private Driver realDriver;
-
- protected TracingDriver() {
- this.realDriver = this.registerTracingDriver();
- }
-
- protected abstract Driver registerTracingDriver();
-
- public java.sql.Connection connect(String url, Properties info) throws SQLException {
- java.sql.Connection conn = this.realDriver.connect(this.getRealUrl(url), info);
- if(!AuthDesc.isAuth()){
- return conn;
- }else{
- return new SWConnection(url, info, conn);
- }
- }
-
- public boolean acceptsURL(String url) throws SQLException {
- return this.realDriver.acceptsURL(this.getRealUrl(url));
- }
-
- public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
- throws SQLException {
- return this.realDriver.getPropertyInfo(this.getRealUrl(url), info);
- }
-
- private String getRealUrl(String url) throws SQLException {
- if(url.toLowerCase().startsWith(TRACING_SIGN)){
- return url.substring(TRACING_SIGN.length());
- }else{
- throw new SQLException("tracing jdbc url must start with 'tracing:'");
- }
- }
-
- public int getMajorVersion() {
- return safeIntParse("1");
- }
-
- public int getMinorVersion() {
- return safeIntParse("0");
- }
-
- public boolean jdbcCompliant() {
- return false;
- }
-
- public Logger getParentLogger() throws SQLFeatureNotSupportedException {
- return null;
- }
-
- private static int safeIntParse(String intAsString) {
- try {
- return Integer.parseInt(intAsString);
- } catch (NumberFormatException nfe) {
- }
- return 0;
- }
-}
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/mysql/MySQLTracingDriver.java b/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/mysql/MySQLTracingDriver.java
deleted file mode 100644
index 6d0b94efa..000000000
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/mysql/MySQLTracingDriver.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.ai.cloud.skywalking.plugin.jdbc.mysql;
-
-import java.sql.Driver;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-import com.ai.cloud.skywalking.plugin.jdbc.TracingDriver;
-
-public class MySQLTracingDriver extends TracingDriver {
- static {
- try {
- DriverManager.registerDriver(new MySQLTracingDriver());
- } catch (SQLException e) {
- throw new RuntimeException("register "
- + MySQLTracingDriver.class.getName() + " driver failure.");
- }
- }
-
- /**
- * 继承自TracingDriver,返回真实的Driver
- */
- @Override
- protected Driver registerTracingDriver() {
- try {
- return new com.mysql.jdbc.Driver();
- } catch (SQLException e) {
- throw new RuntimeException("create com.mysql.jdbc.Driver failure.");
- }
- }
-
-}
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/ConnectionTracing.java b/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/ConnectionTracing.java
deleted file mode 100644
index d2d76a589..000000000
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/ConnectionTracing.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.ai.cloud.skywalking.plugin.jdbc.tracing;
-
-import java.sql.SQLException;
-
-import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
-import com.ai.cloud.skywalking.plugin.jdbc.JDBCBuriedPointType;
-import com.ai.cloud.skywalking.model.Identification;
-
-/**
- * 连接级追踪,用于追踪用于Connection的操作追踪
- *
- * @author wusheng
- *
- */
-public class ConnectionTracing {
- private static RPCBuriedPointSender sender = new RPCBuriedPointSender();
-
- public static R execute(java.sql.Connection realConnection,
- String connectInfo, String method, String sql, Executable exec)
- throws SQLException {
- try {
- sender.beforeSend(Identification
- .newBuilder()
- .viewPoint(connectInfo)
- .businessKey(
- "connection."
- + method
- + (sql == null || sql.length() == 0 ? ""
- : ":" + sql)).spanType(JDBCBuriedPointType.instance()).build());
- return exec.exe(realConnection, sql);
- } catch (SQLException e) {
- sender.handleException(e);
- throw e;
- } finally {
- sender.afterSend();
- }
- }
-
- public interface Executable {
- public R exe(java.sql.Connection realConnection, String sql)
- throws SQLException;
- }
-}
diff --git a/skywalking-sdk-plugin/jdbc-plugin/pom.xml b/skywalking-sdk-plugin/mysql-plugin/pom.xml
similarity index 85%
rename from skywalking-sdk-plugin/jdbc-plugin/pom.xml
rename to skywalking-sdk-plugin/mysql-plugin/pom.xml
index 04ed251e3..13ca49bf3 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/pom.xml
+++ b/skywalking-sdk-plugin/mysql-plugin/pom.xml
@@ -7,7 +7,7 @@
4.0.0
- skywalking-jdbc-plugin
+ skywalking-mysql-plugin
jar
jdbc-plugin
@@ -29,6 +29,19 @@
5.1.36
compile
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.4.1
+ test
+
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionInterceptor.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionInterceptor.java
new file mode 100644
index 000000000..f36ee8c49
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionInterceptor.java
@@ -0,0 +1,107 @@
+package com.ai.cloud.skywalking.plugin.mysql;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.Statement;
+import java.util.Properties;
+
+import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
+import com.ai.cloud.skywalking.model.Identification;
+import com.ai.cloud.skywalking.plugin.interceptor.ConstructorInvokeContext;
+import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext;
+import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor;
+import com.ai.cloud.skywalking.plugin.interceptor.MethodInvokeContext;
+
+public class ConnectionInterceptor implements IAroundInterceptor {
+ private static final String CONNECTION_INFO_KEY = "connectInfo";
+
+ private static RPCBuriedPointSender sender = new RPCBuriedPointSender();
+
+ @Override
+ public void onConstruct(EnhancedClassInstanceContext context,
+ ConstructorInvokeContext interceptorContext) {
+ String url = (String) interceptorContext.allArguments()[4];
+ Properties info = (Properties) interceptorContext.allArguments()[2];
+ context.set(CONNECTION_INFO_KEY, url + "(" + info.getProperty("user")
+ + ")");
+ }
+
+ @Override
+ public void beforeMethod(EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext) {
+ if(context == null){
+ // be intercepted method could be called in constructor, ignore.
+ return;
+ }
+ String connectInfo = context.get(CONNECTION_INFO_KEY, String.class);
+ String method = interceptorContext.methodName();
+ String sql = "";
+ switch (method) {
+ case "commit":
+ this.beforeSend(connectInfo, method, sql);
+ break;
+ case "rollback":
+ this.beforeSend(connectInfo, method, sql);
+ break;
+ case "close":
+ this.beforeSend(connectInfo, method, sql);
+ break;
+ }
+ }
+
+ private void beforeSend(String connectInfo, String method, String sql) {
+ sender.beforeSend(Identification
+ .newBuilder()
+ .viewPoint(connectInfo)
+ .businessKey(
+ "connection."
+ + method
+ + (sql == null || sql.length() == 0 ? "" : ":"
+ + sql))
+ .spanType(JDBCBuriedPointType.instance()).build());
+ }
+
+ @Override
+ public Object afterMethod(EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext, Object ret) {
+ if(context == null){
+ // be intercepted method could be called in constructor, ignore.
+ return ret;
+ }
+ String connectInfo = context.get(CONNECTION_INFO_KEY, String.class);
+ switch (interceptorContext.methodName()) {
+ case "createStatement":
+ return new SWStatement((Connection) interceptorContext.inst(),
+ (Statement) ret, connectInfo);
+ case "prepareStatement":
+ String sql = (String) interceptorContext.allArguments()[0];
+ return new SWPreparedStatement(
+ (Connection) interceptorContext.inst(),
+ (PreparedStatement) ret, connectInfo, sql);
+ case "prepareCall":
+ String callableSql = (String) interceptorContext.allArguments()[0];
+ return new SWCallableStatement(
+ (Connection) interceptorContext.inst(),
+ (CallableStatement) ret, connectInfo, callableSql);
+ case "commit":
+ case "rollback":
+ case "close":
+ sender.afterSend();
+ }
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(Throwable t,
+ EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext, Object ret) {
+ switch (interceptorContext.methodName()) {
+ case "commit":
+ case "rollback":
+ case "close":
+ sender.handleException(t);
+ break;
+ }
+ }
+}
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java
new file mode 100644
index 000000000..e03561f57
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java
@@ -0,0 +1,28 @@
+package com.ai.cloud.skywalking.plugin.mysql;
+
+import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor;
+import com.ai.cloud.skywalking.plugin.interceptor.InterceptPoint;
+import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine;
+
+public class ConnectionPluginDefine implements InterceptorDefine {
+
+ @Override
+ public String getBeInterceptedClassName() {
+ return "com.mysql.jdbc.JDBC4Connection";
+ }
+
+ @Override
+ public InterceptPoint[] getBeInterceptedMethods() {
+ return new InterceptPoint[] { new InterceptPoint("createStatement", 2),
+ new InterceptPoint("prepareStatement", 3),
+ new InterceptPoint("prepareCall", 3),
+ new InterceptPoint("commit"), new InterceptPoint("rollback"),
+ new InterceptPoint("close") };
+ }
+
+ @Override
+ public IAroundInterceptor instance() {
+ return new ConnectionInterceptor();
+ }
+
+}
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCBuriedPointType.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/JDBCBuriedPointType.java
similarity index 93%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCBuriedPointType.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/JDBCBuriedPointType.java
index bacb6a948..e72351a4f 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCBuriedPointType.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/JDBCBuriedPointType.java
@@ -1,4 +1,4 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
+package com.ai.cloud.skywalking.plugin.mysql;
import com.ai.cloud.skywalking.api.IBuriedPointType;
import com.ai.cloud.skywalking.protocol.CallType;
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWCallableStatement.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWCallableStatement.java
similarity index 99%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWCallableStatement.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWCallableStatement.java
index 65b3d5045..ab20b6aa5 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWCallableStatement.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWCallableStatement.java
@@ -1,4 +1,4 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
+package com.ai.cloud.skywalking.plugin.mysql;
import java.io.InputStream;
import java.io.Reader;
@@ -24,16 +24,16 @@ import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Map;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.CallableStatementTracing;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.CallableStatementTracing.Executable;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.CallableStatementTracing;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.CallableStatementTracing.Executable;
public class SWCallableStatement implements CallableStatement {
- private SWConnection realConnection;
+ private Connection realConnection;
private java.sql.CallableStatement realStatement;
private String connectInfo;
private String sql;
- SWCallableStatement(SWConnection realConnection,
+ SWCallableStatement(Connection realConnection,
java.sql.CallableStatement realStatement, String connectInfo,
String sql) {
this.realConnection = realConnection;
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWPreparedStatement.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWPreparedStatement.java
similarity index 98%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWPreparedStatement.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWPreparedStatement.java
index 7f9febd4e..72cbbd44d 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWPreparedStatement.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWPreparedStatement.java
@@ -1,4 +1,4 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
+package com.ai.cloud.skywalking.plugin.mysql;
import java.io.InputStream;
import java.io.Reader;
@@ -23,16 +23,16 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.PreparedStatementTracing;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.PreparedStatementTracing.Executable;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.PreparedStatementTracing;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.PreparedStatementTracing.Executable;
public class SWPreparedStatement implements PreparedStatement {
- private SWConnection realConnection;
+ private Connection realConnection;
private java.sql.PreparedStatement realStatement;
private String connectInfo;
private String sql;
- SWPreparedStatement(SWConnection realConnection,
+ SWPreparedStatement(Connection realConnection,
java.sql.PreparedStatement realStatement, String connectInfo,
String sql) {
this.realConnection = realConnection;
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWStatement.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWStatement.java
similarity index 95%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWStatement.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWStatement.java
index e577c5cad..6da9754b8 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/SWStatement.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/SWStatement.java
@@ -1,20 +1,20 @@
-package com.ai.cloud.skywalking.plugin.jdbc;
+package com.ai.cloud.skywalking.plugin.mysql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.StatementTracing;
-import com.ai.cloud.skywalking.plugin.jdbc.tracing.StatementTracing.Executable;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.StatementTracing;
+import com.ai.cloud.skywalking.plugin.mysql.tracing.StatementTracing.Executable;
public class SWStatement implements java.sql.Statement {
- private SWConnection realConnection;
+ private Connection realConnection;
private java.sql.Statement realStatement;
private String connectInfo;
- SWStatement(SWConnection realConnection, java.sql.Statement realStatement, String connectInfo){
+ SWStatement(Connection realConnection, java.sql.Statement realStatement, String connectInfo){
this.realConnection = realConnection;
this.realStatement = realStatement;
this.connectInfo = connectInfo;
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/CallableStatementTracing.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/CallableStatementTracing.java
similarity index 90%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/CallableStatementTracing.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/CallableStatementTracing.java
index 759c55dd1..b089a834f 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/CallableStatementTracing.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/CallableStatementTracing.java
@@ -1,9 +1,9 @@
-package com.ai.cloud.skywalking.plugin.jdbc.tracing;
+package com.ai.cloud.skywalking.plugin.mysql.tracing;
import java.sql.SQLException;
import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
-import com.ai.cloud.skywalking.plugin.jdbc.JDBCBuriedPointType;
+import com.ai.cloud.skywalking.plugin.mysql.JDBCBuriedPointType;
import com.ai.cloud.skywalking.model.Identification;
/**
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/PreparedStatementTracing.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/PreparedStatementTracing.java
similarity index 90%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/PreparedStatementTracing.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/PreparedStatementTracing.java
index d3535e386..89ac3f4bc 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/PreparedStatementTracing.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/PreparedStatementTracing.java
@@ -1,9 +1,9 @@
-package com.ai.cloud.skywalking.plugin.jdbc.tracing;
+package com.ai.cloud.skywalking.plugin.mysql.tracing;
import java.sql.SQLException;
import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
-import com.ai.cloud.skywalking.plugin.jdbc.JDBCBuriedPointType;
+import com.ai.cloud.skywalking.plugin.mysql.JDBCBuriedPointType;
import com.ai.cloud.skywalking.model.Identification;
/**
diff --git a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/StatementTracing.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/StatementTracing.java
similarity index 91%
rename from skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/StatementTracing.java
rename to skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/StatementTracing.java
index d1dd7d3e4..12012cb4a 100644
--- a/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/tracing/StatementTracing.java
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/tracing/StatementTracing.java
@@ -1,7 +1,7 @@
-package com.ai.cloud.skywalking.plugin.jdbc.tracing;
+package com.ai.cloud.skywalking.plugin.mysql.tracing;
import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
-import com.ai.cloud.skywalking.plugin.jdbc.JDBCBuriedPointType;
+import com.ai.cloud.skywalking.plugin.mysql.JDBCBuriedPointType;
import com.ai.cloud.skywalking.model.Identification;
import java.sql.SQLException;
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/resources/log4j2.xml b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..4e2af7485
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/resources/sky-walking.auth b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/sky-walking.auth
new file mode 100644
index 000000000..c794ea37c
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/sky-walking.auth
@@ -0,0 +1,47 @@
+#skyWalking用户ID
+skywalking.user_id=123
+#skyWalking应用编码
+skywalking.application_code=test
+#skywalking auth的环境变量名字
+skywalking.auth_system_env_name=SKYWALKING_RUN
+#skywalking数据编码
+skywalking.charset=UTF-8
+
+#是否打印数据
+buriedpoint.printf=true
+#埋点异常的最大长度
+buriedpoint.max_exception_stack_length=4000
+#业务字段的最大长度
+buriedpoint.businesskey_max_length=300
+#过滤异常
+buriedpoint.exclusive_exceptions=java.lang.RuntimeException
+
+#最大发送者的连接数阀比例
+sender.connect_percent=100
+#发送服务端配置
+sender.servers_addr=127.0.0.1:34000
+#最大发送的副本数量
+sender.max_copy_num=2
+#发送的最大长度
+sender.max_send_length=20000
+#当没有Sender时,尝试获取sender的等待周期
+sender.retry_get_sender_wait_interval=2000
+#是否开启发送消息
+sender.is_off=false
+
+
+#最大消费线程数
+consumer.max_consumer=2
+#消费者最大等待时间
+consumer.max_wait_time=5
+#发送失败等待时间
+consumer.consumer_fail_retry_wait_interval=50
+
+#每个Buffer的最大个数
+buffer.buffer_max_size=18000
+#Buffer池的最大长度
+buffer.pool_size=5
+
+#发送检查线程检查周期
+senderchecker.check_polling_time=200
+
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/resources/skywalking-plugin.def b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/skywalking-plugin.def
new file mode 100644
index 000000000..a309bb0fe
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/main/resources/skywalking-plugin.def
@@ -0,0 +1 @@
+com.ai.cloud.skywalking.plugin.mysql.ConnectionPluginDefine
diff --git a/skywalking-sdk-plugin/mysql-plugin/src/test/java/test/ai/cloud/skywalking/plugin/mysql/TestMySQLDriver.java b/skywalking-sdk-plugin/mysql-plugin/src/test/java/test/ai/cloud/skywalking/plugin/mysql/TestMySQLDriver.java
new file mode 100644
index 000000000..fc1eb2c83
--- /dev/null
+++ b/skywalking-sdk-plugin/mysql-plugin/src/test/java/test/ai/cloud/skywalking/plugin/mysql/TestMySQLDriver.java
@@ -0,0 +1,40 @@
+package test.ai.cloud.skywalking.plugin.mysql;
+
+import java.lang.reflect.InvocationTargetException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.junit.Test;
+
+import com.ai.cloud.skywalking.plugin.TracingBootstrap;
+
+public class TestMySQLDriver {
+ @Test
+ public void testsql() throws IllegalAccessException,
+ IllegalArgumentException, InvocationTargetException,
+ NoSuchMethodException, SecurityException, ClassNotFoundException {
+ TracingBootstrap
+ .main(new String[] { "test.ai.cloud.skywalking.plugin.mysql.TestMySQLDriver" });
+ }
+
+ public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
+ Class.forName("com.mysql.jdbc.Driver");
+ String url="jdbc:mysql://10.1.228.202:31316/test?user=devrdbusr21&password=devrdbusr21";
+
+ Connection con = DriverManager.getConnection(url);
+ Statement state = con.createStatement();
+ con.setAutoCommit(false);
+ state.execute("select 1 from dual");
+
+ PreparedStatement p0 = con.prepareStatement("select 1 from dual where 1=?");
+ p0.setInt(1, 1);
+ p0.execute();
+ con.commit();
+ con.close();
+
+ Thread.sleep(5* 1000);
+ }
+}
diff --git a/skywalking-sdk-plugin/pom.xml b/skywalking-sdk-plugin/pom.xml
index 7ff5b4bc7..05addc40a 100644
--- a/skywalking-sdk-plugin/pom.xml
+++ b/skywalking-sdk-plugin/pom.xml
@@ -8,7 +8,7 @@
dubbo-plugin
spring-plugin
- jdbc-plugin
+ mysql-plugin
web-plugin
httpclient-4.2.x-plugin
httpclient-4.3.x-plugin
@@ -26,7 +26,7 @@
junit
junit
- 3.8.1
+ 4.12
test