perf(X-Pack): 数据源插件驱动相关

This commit is contained in:
fit2cloud-chenyw 2024-07-23 17:50:12 +08:00
parent cd8b24ba42
commit 4c8dc204b3
2 changed files with 63 additions and 1 deletions

@ -1 +1 @@
Subproject commit db1c81ee6199d7e7920eaa41dd3e8418cd17b5db
Subproject commit 1ae6324b4f22f14846ad2990bdaea0915be83c3e

View File

@ -5,17 +5,58 @@ import io.dataease.extensions.datasource.factory.ProviderFactory;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.license.utils.JsonUtil;
import io.dataease.license.utils.LogUtil;
import io.dataease.plugins.template.DataEasePlugin;
import io.dataease.plugins.vo.DataEasePluginVO;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* @Author Junjun
*/
public abstract class DataEaseDatasourcePlugin extends Provider implements DataEasePlugin {
private final String FILE_PATH = "/opt/dataease2.0/drivers";
@Override
public void loadPlugin() {
XpackPluginsDatasourceVO datasourceConfig = getConfig();
ProviderFactory.loadPlugin(datasourceConfig.getType(), this);
try {
loadDriver();
} catch (Exception e) {
DEException.throwException(e);
}
}
private void loadDriver() throws Exception {
ClassLoader classLoader = this.getClass().getClassLoader();
URL[] urls = ((URLClassLoader) classLoader).getURLs();
String jarPath = urls[0].getPath();
JarFile jarFile = new JarFile(jarPath);
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = (JarEntry) entries.nextElement();
String name = entry.getName();
if (StringUtils.endsWith(name, ".jar")) {
InputStream inputStream = jarFile.getInputStream(entry);
File file = new File(FILE_PATH, name.substring(name.indexOf("/") + 1));
FileOutputStream outputStream = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int length;
while ((length = inputStream.read(bytes)) >= 0) {
outputStream.write(bytes, 0, length);
}
}
}
}
public XpackPluginsDatasourceVO getConfig() {
@ -30,4 +71,25 @@ public abstract class DataEaseDatasourcePlugin extends Provider implements DataE
vo.setIcon(pluginInfo.getIcon());
return vo;
}
/*@Override
public void unloadPlugin() {
try {
ClassLoader classLoader = this.getClass().getClassLoader();
URL[] urls = ((URLClassLoader) classLoader).getURLs();
String jarPath = urls[0].getPath();
JarFile jarFile = new JarFile(jarPath);
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = (JarEntry) entries.nextElement();
String name = entry.getName();
if (StringUtils.endsWith(name, ".jar")) {
File file = new File(FILE_PATH, name.substring(name.indexOf("/") + 1));
file.delete();
}
}
} catch (Exception e) {
DEException.throwException(e);
}
}*/
}