diff --git a/README.md b/README.md
index 6d53c55..67d2049 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,8 @@
启用该插件以后,需要在WEB-INF目录下新建一个driverlib文件夹,将对应的驱动jar包放入这个文件夹内即可
- 注意:使用了隔离插件以后驱动jar包不需要放在lib目录下
+ 注意A:使用了隔离插件以后驱动jar包不需要放在lib目录下
+ 注意B:HIVE驱动依赖于slf4j的jar,同样需要放入dirverlib文件夹中
目前该插件默认是隔离MySQL的驱动,如果是其他数据源,只需要修改DRIVER_NAME_KEY为对应的驱动即可
diff --git a/plugin.xml b/plugin.xml
index 47b2560..47fbff1 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -12,6 +12,7 @@
[2019-05-20]优化逻辑。
[2019-05-30]实现一个可用的ClassLoader。
[2019-05-31]修改Mysql的key为Hive。
+ [2019-05-31]考虑一下并发问题,针对hive修改了一下加载机制。
]]>
com.fr.plugin.dialect.classloader
diff --git a/src/main/java/com/fr/plugin/dialect/classloader/ClassLoaderHandler.java b/src/main/java/com/fr/plugin/dialect/classloader/ClassLoaderHandler.java
index fd02b5d..736311f 100644
--- a/src/main/java/com/fr/plugin/dialect/classloader/ClassLoaderHandler.java
+++ b/src/main/java/com/fr/plugin/dialect/classloader/ClassLoaderHandler.java
@@ -20,10 +20,11 @@ import java.util.List;
@EnableMetrics
public class ClassLoaderHandler extends AbstractDataSourceDriverLoader {
+ private ClassLoader driverClassLoader;
//插件获取jar的路径,和lib同级的driverlib目录
public static final String DRIVER_LIB_DIR = "driverlib";
- //demo设置为mysql为目标驱动
+ //demo设置为hive为目标驱动
private static final String DRIVER_NAME_KEY = "org.apache.hive.jdbc.HiveDriver";
@Focus(id = "com.fr.plugin.dialect.classloader.ClassLoaderHandler", text = "", source = Original.PLUGIN)
@@ -41,11 +42,14 @@ public class ClassLoaderHandler extends AbstractDataSourceDriverLoader {
@Focus(id = "com.fr.plugin.dialect.classloader.ClassLoaderHandler", text = "", source = Original.PLUGIN)
public ClassLoader getClassLoader() {
- FineLoggerFactory.getLogger().info("====== Loading Mysql ClassLoader ... ======");
- URL[] urls = getJarURLS();
- ClassLoader cl = new DriverClassLoader(urls);
- Thread.currentThread().setContextClassLoader(cl);
- return cl;
+ FineLoggerFactory.getLogger().info("====== Loading Hive ClassLoader ... ======");
+ synchronized (this) {
+ if (this.driverClassLoader == null) {
+ URL[] urls = getJarURLS();
+ this.driverClassLoader = new DriverClassLoader(urls);
+ }
+ return driverClassLoader;
+ }
}
diff --git a/src/main/java/com/fr/plugin/dialect/classloader/DriverClassLoader.java b/src/main/java/com/fr/plugin/dialect/classloader/DriverClassLoader.java
index 6f80d96..50f6aeb 100644
--- a/src/main/java/com/fr/plugin/dialect/classloader/DriverClassLoader.java
+++ b/src/main/java/com/fr/plugin/dialect/classloader/DriverClassLoader.java
@@ -33,8 +33,8 @@ public class DriverClassLoader extends URLClassLoader {
FineLoggerFactory.getLogger().debug("Did not find class{}, in the paths {}, try to get from common lib", name, this.getUrlStrings());
c = super.loadClass(name);
}
-
return c;
+
}
}