From 4c8dc204b3b516bc68e4e09636f32498e24e2326 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 23 Jul 2024 17:50:12 +0800 Subject: [PATCH] =?UTF-8?q?perf(X-Pack):=20=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E9=A9=B1=E5=8A=A8=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- .../plugin/DataEaseDatasourcePlugin.java | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index db1c81ee61..1ae6324b4f 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit db1c81ee6199d7e7920eaa41dd3e8418cd17b5db +Subproject commit 1ae6324b4f22f14846ad2990bdaea0915be83c3e diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/plugin/DataEaseDatasourcePlugin.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/plugin/DataEaseDatasourcePlugin.java index 7eac716a7a..bfb46f53c2 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/plugin/DataEaseDatasourcePlugin.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/plugin/DataEaseDatasourcePlugin.java @@ -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 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 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); + } + }*/ }