Browse Source

BI-100757 fix:使用自定义驱动,mysql数据连接连接不上

feature/x
Roger.Chen 3 years ago
parent
commit
121adcc91c
  1. 32
      fine-druid/src/main/java/com/fr/third/alibaba/druid/util/MySqlUtils.java
  2. 14
      fine-druid/src/main/java/com/fr/third/alibaba/druid/util/Utils.java

32
fine-druid/src/main/java/com/fr/third/alibaba/druid/util/MySqlUtils.java

@ -357,16 +357,14 @@ public class MySqlUtils {
} }
Class<?> clazz = conn.getClass(); Class<?> clazz = conn.getClass();
if (class_ConnectionImpl == null) { if (clazz.getName().equals("com.mysql.jdbc.ConnectionImpl")) {
if (clazz.getName().equals("com.mysql.jdbc.ConnectionImpl")) { class_ConnectionImpl = clazz;
class_ConnectionImpl = clazz; } else if (clazz.getName().equals("com.mysql.jdbc.Connection")) { // mysql 5.0.x
} else if (clazz.getName().equals("com.mysql.jdbc.Connection")) { // mysql 5.0.x class_ConnectionImpl = clazz;
class_ConnectionImpl = clazz; } else if (clazz.getName().equals("com.mysql.cj.jdbc.ConnectionImpl")) { // mysql 5.0.x
} else if (clazz.getName().equals("com.mysql.cj.jdbc.ConnectionImpl")) { // mysql 5.0.x class_ConnectionImpl = clazz;
class_ConnectionImpl = clazz; } else if (clazz.getSuperclass().getName().equals("com.mysql.jdbc.ConnectionImpl")) {
} else if (clazz.getSuperclass().getName().equals("com.mysql.jdbc.ConnectionImpl")) { class_ConnectionImpl = clazz.getSuperclass();
class_ConnectionImpl = clazz.getSuperclass();
}
} }
if (class_ConnectionImpl == clazz || class_ConnectionImpl == clazz.getSuperclass()) { if (class_ConnectionImpl == clazz || class_ConnectionImpl == clazz.getSuperclass()) {
@ -387,7 +385,7 @@ public class MySqlUtils {
} }
public static long getLastPacketReceivedTimeMs(Connection conn) throws SQLException { public static long getLastPacketReceivedTimeMs(Connection conn) throws SQLException {
if (class_connectionImpl == null && !class_connectionImpl_Error) { if (!class_connectionImpl_Error) {
try { try {
class_connectionImpl = Utils.loadClass("com.mysql.jdbc.MySQLConnection"); class_connectionImpl = Utils.loadClass("com.mysql.jdbc.MySQLConnection");
if (class_connectionImpl == null) { if (class_connectionImpl == null) {
@ -406,9 +404,7 @@ public class MySqlUtils {
} }
if(mysqlJdbcVersion6){ if(mysqlJdbcVersion6){
if (classJdbc == null) { classJdbc = Utils.loadClass("com.mysql.cj.jdbc.JdbcConnection");
classJdbc = Utils.loadClass("com.mysql.cj.jdbc.JdbcConnection");
}
if (classJdbc == null) { if (classJdbc == null) {
return -1; return -1;
@ -441,7 +437,7 @@ public class MySqlUtils {
throw new SQLException("getIdleFor error", e); throw new SQLException("getIdleFor error", e);
} }
} else { } else {
if (method_getIO == null && !method_getIO_error) { if (!method_getIO_error) {
try { try {
method_getIO = class_connectionImpl.getMethod("getIO"); method_getIO = class_connectionImpl.getMethod("getIO");
} catch (Throwable error) { } catch (Throwable error) {
@ -453,7 +449,7 @@ public class MySqlUtils {
return -1; return -1;
} }
if (class_MysqlIO == null && !class_MysqlIO_Error) { if (!class_MysqlIO_Error) {
try { try {
class_MysqlIO = Utils.loadClass("com.mysql.jdbc.MysqlIO"); class_MysqlIO = Utils.loadClass("com.mysql.jdbc.MysqlIO");
} catch (Throwable error) { } catch (Throwable error) {
@ -465,7 +461,7 @@ public class MySqlUtils {
return -1; return -1;
} }
if (method_getLastPacketReceivedTimeMs == null && !method_getLastPacketReceivedTimeMs_error) { if (!method_getLastPacketReceivedTimeMs_error) {
try { try {
Method method = class_MysqlIO.getDeclaredMethod("getLastPacketReceivedTimeMs"); Method method = class_MysqlIO.getDeclaredMethod("getLastPacketReceivedTimeMs");
method.setAccessible(true); method.setAccessible(true);
@ -1988,4 +1984,4 @@ public class MySqlUtils {
byte[] bytes = HexBin.decode(hex); byte[] bytes = HexBin.decode(hex);
return new String(bytes, BIG5); return new String(bytes, BIG5);
} }
} }

14
fine-druid/src/main/java/com/fr/third/alibaba/druid/util/Utils.java

@ -239,21 +239,21 @@ public class Utils {
return null; return null;
} }
try {
return Class.forName(className);
} catch (ClassNotFoundException e) {
// skip
}
ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader(); ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader();
if (ctxClassLoader != null) { if (ctxClassLoader != null) {
try { try {
clazz = ctxClassLoader.loadClass(className); return clazz = ctxClassLoader.loadClass(className);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
// skip // skip
} }
} }
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
// skip
}
return clazz; return clazz;
} }

Loading…
Cancel
Save