Browse Source

Merge branch 'master' of Munin/demo-driver-loader into master

master
richie 6 years ago committed by Gogs
parent
commit
9642fb838a
  1. 3
      README.md
  2. 1
      plugin.xml
  3. 16
      src/main/java/com/fr/plugin/dialect/classloader/ClassLoaderHandler.java
  4. 2
      src/main/java/com/fr/plugin/dialect/classloader/DriverClassLoader.java

3
README.md

@ -8,7 +8,8 @@
启用该插件以后,需要在WEB-INF目录下新建一个driverlib文件夹,将对应的驱动jar包放入这个文件夹内即可
注意:使用了隔离插件以后驱动jar包不需要放在lib目录下
注意A:使用了隔离插件以后驱动jar包不需要放在lib目录下
注意B:HIVE驱动依赖于slf4j的jar,同样需要放入dirverlib文件夹中
目前该插件默认是隔离MySQL的驱动,如果是其他数据源,只需要修改DRIVER_NAME_KEY为对应的驱动即可

1
plugin.xml

@ -12,6 +12,7 @@
[2019-05-20]优化逻辑。<br/>
[2019-05-30]实现一个可用的ClassLoader。<br/>
[2019-05-31]修改Mysql的key为Hive。<br/>
[2019-05-31]考虑一下并发问题,针对hive修改了一下加载机制。<br/>
]]></change-notes>
<main-package>com.fr.plugin.dialect.classloader</main-package>
<extra-core>

16
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;
}
}

2
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;
}
}

Loading…
Cancel
Save