【仅供内部供应商使用,不提供对外解答和培训】
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
package com.fr.stable.fun.impl;
import com.fr.plugin.ExtraClassManager;
import com.fr.plugin.manage.PluginManager;
import com.fr.stable.fun.DatasourceDriverLoader;
import java.util.Set;
/**
*具体调用接口的工具类
*/
public class DataSourceDriverLoaderUtils {
public static ClassLoader getClassLoader(String driverName) {
Set<DataSourceDriverLoader> dataSourceDriverLoaders = getDataSourceDriverLoader();
//是空的话说明插件没有成功加载
if (dataSourceDriverLoaders == null || dataSourceDriverLoaders.isEmpty()) {
FineLoggerFactory.getLogger().info("====== not loading classloader plugin ======");
} else {
for (DataSourceDriverLoader datasourceDriverLoader : dataSourceDriverLoaders) {
//判断是否是目标driver
if (datasourceDriverLoader.isInterceptAllowed(driverName)) {
ClassLoader classLoader = datasourceDriverLoader.getClassLoader();
return classLoader;
}
}
}
return null;
}
private static Set<DataSourceDriverLoader> getDataSourceDriverLoader() {
return ExtraClassManager.getInstance().getArray(DataSourceDriverLoader.XML_TAG);
}
}
|
| Code Block | ||
|---|---|---|
| ||
<extra-core>
<DataSourceDriverLoader class="com.fr.plugin.dialect.classloader.ClassLoaderHandler"/>
</extra-core> |
...
demo里在成功命中目标驱动后设置了日志信息输出:
https://gitcode.fanruan.com/fanruan/demo-driver-loader
1、仅当实现的ClassLoader不为空时才会set进datasource中