From 86a6434832baf0d00126a449c2a4ee2223b936ad Mon Sep 17 00:00:00 2001 From: ruying408 <1877972603@qq.com> Date: Sun, 28 Jul 2024 14:07:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E4=BE=9D=E8=B5=96=E7=B1=BB?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=BC=82=E6=AD=A5=E6=96=B9=E5=BC=8F=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=B8=BB=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=85=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/config/DynamicJarClassLoader.java | 76 +++++++++---------- .../service/DynamicJarLoaderService.java | 6 +- 2 files changed, 38 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/cool/core/plugin/config/DynamicJarClassLoader.java b/src/main/java/com/cool/core/plugin/config/DynamicJarClassLoader.java index 18a28b5..e5b771e 100644 --- a/src/main/java/com/cool/core/plugin/config/DynamicJarClassLoader.java +++ b/src/main/java/com/cool/core/plugin/config/DynamicJarClassLoader.java @@ -43,22 +43,19 @@ public class DynamicJarClassLoader extends URLClassLoader { public void unload() { CoolPreconditions.check(lock, "异步加载任务还未完成,请稍后重试......"); lock = true; - new Thread(new Runnable() { - @Override - public void run() { - try { - for (Map.Entry> entry : loadedClasses.entrySet()) { - // 从已加载的类集合中移除该类 - String className = entry.getKey(); - loadedClasses.remove(className); - } - // 从其父类加载器的加载器层次结构中移除该类加载器 - close(); - } catch (Exception e) { - log.error("unload error", e); - } finally{ - lock = false; + new Thread(() -> { + try { + for (Map.Entry> entry : loadedClasses.entrySet()) { + // 从已加载的类集合中移除该类 + String className = entry.getKey(); + loadedClasses.remove(className); } + // 从其父类加载器的加载器层次结构中移除该类加载器 + close(); + } catch (Exception e) { + log.error("unload error", e); + } finally{ + lock = false; } }).start(); } @@ -98,36 +95,33 @@ public class DynamicJarClassLoader extends URLClassLoader { /** * 异步加载 */ - public void asyncLoadClass(List list) { + public void asyncLoadClass(String key, List list) { CoolPreconditions.check(lock, "异步加载任务还未完成,请稍后重试......"); lock = true; - new Thread(new Runnable() { - @Override - public void run() { - log.info("开始异步加载...."); - Instant start = Instant.now(); - int size = list.size(); - int currentProgress = 0; - int progressThreshold = 10; // 输出进度的阈值为10% - int count = 0; - try{ - for (JarEntry jarEntry : list) { - count++; - loadClass(jarEntry, null); - // 计算进度百分比 - int progress = (int) ((count / (double) size) * 100); - // 输出一次进度 - if (progress % progressThreshold == 0 && currentProgress != progress) { - log.info("异步加载进度: {}%", progress); - currentProgress = progress; - } + new Thread(() -> { + log.info("开始异步加载插件{}依赖类....", key); + Instant start = Instant.now(); + int size = list.size(); + int currentProgress = 0; + int progressThreshold = 10; // 输出进度的阈值为10% + int count = 0; + try{ + for (JarEntry jarEntry : list) { + count++; + loadClass(jarEntry, null); + // 计算进度百分比 + int progress = (int) ((count / (double) size) * 100); + // 输出一次进度 + if (progress % progressThreshold == 0 && currentProgress != progress) { + log.info("插件{}依赖类异步加载进度: {}%", key, progress); + currentProgress = progress; } - } finally{ - Instant end = Instant.now(); - Duration timeElapsed = Duration.between(start, end); - log.info("异步加载完成本次共加载{}个文件 耗时: {}ms", count, timeElapsed.toMillis()); - lock = false; } + } finally{ + Instant end = Instant.now(); + Duration timeElapsed = Duration.between(start, end); + log.info("异步加载插件{}依赖类完成,共加载{}个文件 耗时: {}ms", key, count, timeElapsed.toMillis()); + lock = false; } }).start(); } diff --git a/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java b/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java index 0c66622..ffc4ce6 100644 --- a/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java +++ b/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java @@ -48,7 +48,7 @@ public class DynamicJarLoaderService { // 历史如果有安装过,先卸载 uninstall(pluginJson.getKey()); // 加载class - List> plugins = loadClass(jarUrl, dynamicJarClassLoader); + List> plugins = loadClass(pluginJson.getKey(), jarUrl, dynamicJarClassLoader); // 校验插件 checkPlugin(plugins); // 注册插件,目前一个插件包,只允许有一个插件入口 @@ -59,7 +59,7 @@ public class DynamicJarLoaderService { /** * 加载class */ - private static List> loadClass(URL jarUrl, + private static List> loadClass(String key, URL jarUrl, DynamicJarClassLoader dynamicJarClassLoader) throws IOException { // 加载类 List> plugins = new ArrayList<>(); @@ -69,7 +69,7 @@ public class DynamicJarLoaderService { // 先加载前100个类,主够包含了插件主类,其余的异步加载 dynamicJarClassLoader.loadClass(firstNElements, plugins); // 异步加载插件依赖类 - dynamicJarClassLoader.asyncLoadClass(list); + dynamicJarClassLoader.asyncLoadClass(key, list); } return plugins; }