From c5c7f3015c17f98790db9c58210107a0512bef65 Mon Sep 17 00:00:00 2001 From: ruying408 <1877972603@qq.com> Date: Sat, 27 Jul 2024 18:00:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=8C=E6=8F=92=E4=BB=B6=E5=8D=B8=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/core/plugin/service/CoolPluginService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/cool/core/plugin/service/CoolPluginService.java b/src/main/java/com/cool/core/plugin/service/CoolPluginService.java index 61aef19..260446d 100644 --- a/src/main/java/com/cool/core/plugin/service/CoolPluginService.java +++ b/src/main/java/com/cool/core/plugin/service/CoolPluginService.java @@ -91,12 +91,14 @@ public class CoolPluginService { public void install(MultipartFile file, boolean force) { File jarFile = null; ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); + String key = null; try { // 保存jar文件 jarFile = saveJarFile(file); String jarFilePath = jarFile.getAbsolutePath(); // 加载jar PluginJson pluginJson = dynamicJarLoaderService.install(jarFilePath, force); + key = pluginJson.getKey(); // 保存插件信息入库 savePluginInfo(pluginJson, jarFilePath, jarFile, force); // 把 ApplicationContext 对象传递打插件类中,使其在插件中也能正常使用spring bean对象 @@ -107,11 +109,16 @@ public class CoolPluginService { CoolPreconditions.returnData( new CoolPreconditions.ReturnData(1, "插件已存在,继续安装将覆盖")); } + if (ObjUtil.isNotEmpty(key)) { + // 报错失败,调用卸载 + dynamicJarLoaderService.uninstall(key); + } CoolPreconditions.alwaysThrow(persistenceException.getMessage()); } catch (CoolException e) { FileUtil.del(jarFile); throw e; } catch (Exception e) { + FileUtil.del(jarFile); log.error("插件安装失败", e); CoolPreconditions.alwaysThrow("插件安装失败", e); } finally {