特定驱动的ClassLoader拦截器demo。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.6 KiB

package com.fr.plugin.dialect.classloader;
import com.fr.log.FineLoggerFactory;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @author: Roy
* @date: 2019/5/29 6:39 PM
*/
public class DriverClassLoader extends URLClassLoader {
public DriverClassLoader(URL[] urls) {
super(urls, Thread.currentThread().getContextClassLoader());
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
synchronized (getClassLoadingLock(name)) {
Class<?> c = findLoadedClass(name);
if (c == null) {
try {
c = findClass(name);
FineLoggerFactory.getLogger().debug("load class {} from driverlib successful", name);
} catch (Exception e) {
//can not find class in isolate dir, try to load from common lib
}
}
if (c == null) {
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;
}
}
private String getUrlStrings() {
StringBuilder stringBuilder = new StringBuilder();
try {
for (URL url : getURLs()) {
stringBuilder
.append("\n\r")
.append(url.getPath())
.append("\n\r");
}
} catch (Exception e) {
}
return stringBuilder.toString();
}
}