From 255e7b2fb584094547a5819e8fe09252968482be Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:13:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20JsParserExecutor=20=E5=92=8C=20JsHttpCli?= =?UTF-8?q?ent=20=E6=B7=BB=E5=8A=A0=E8=B5=84=E6=BA=90=E6=B8=85=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=A7=A3=E6=9E=90=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=90=8E=E8=B5=84=E6=BA=90=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - JsHttpClient 添加 close() 方法释放 WebClient 连接池 - JsParserExecutor 添加 close() 方法,清除 ScriptEngine 中注入的 Java 对象引用 - parse()/parseFileList()/parseById() 均在 onComplete 回调中调用 close() 释放资源 --- .../cn/qaiu/parser/customjs/JsHttpClient.java | 11 +++++++++- .../parser/customjs/JsParserExecutor.java | 22 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/parser/src/main/java/cn/qaiu/parser/customjs/JsHttpClient.java b/parser/src/main/java/cn/qaiu/parser/customjs/JsHttpClient.java index 24dbeef..0442903 100644 --- a/parser/src/main/java/cn/qaiu/parser/customjs/JsHttpClient.java +++ b/parser/src/main/java/cn/qaiu/parser/customjs/JsHttpClient.java @@ -61,7 +61,7 @@ public class JsHttpClient { }; public JsHttpClient() { - this.client = WebClient.create(WebClientVertxInit.get(), new WebClientOptions());; + this.client = WebClient.create(WebClientVertxInit.get(), new WebClientOptions()); this.clientSession = WebClientSession.create(client); this.headers = MultiMap.caseInsensitiveMultiMap(); // 设置默认的Accept-Encoding头以支持压缩响应 @@ -677,4 +677,13 @@ public class JsHttpClient { return buffer.length(); } } + + /** + * 关闭 WebClient 释放连接池资源 + */ + public void close() { + if (client != null) { + client.close(); + } + } } diff --git a/parser/src/main/java/cn/qaiu/parser/customjs/JsParserExecutor.java b/parser/src/main/java/cn/qaiu/parser/customjs/JsParserExecutor.java index 6b81116..9414df7 100644 --- a/parser/src/main/java/cn/qaiu/parser/customjs/JsParserExecutor.java +++ b/parser/src/main/java/cn/qaiu/parser/customjs/JsParserExecutor.java @@ -146,6 +146,22 @@ public class JsParserExecutor implements IPanTool { } } + /** + * 释放资源(ScriptEngine 和 HttpClient),避免内存泄漏 + */ + public void close() { + if (httpClient != null) { + httpClient.close(); + } + // 清除 ScriptEngine 持有的 Java 对象引用,帮助 GC 回收 + if (engine != null) { + engine.put("http", null); + engine.put("logger", null); + engine.put("shareLinkInfo", null); + engine.put("JavaFetch", null); + } + } + @Override public Future parse() { jsLogger.info("开始执行JavaScript解析器: {}", config.getType()); @@ -173,7 +189,7 @@ public class JsParserExecutor implements IPanTool { } else { throw new RuntimeException("parse函数类型错误"); } - }); + }).onComplete(ar -> close()); } @Override @@ -206,7 +222,7 @@ public class JsParserExecutor implements IPanTool { } else { throw new RuntimeException("parseFileList函数类型错误"); } - }); + }).onComplete(ar -> close()); } @Override @@ -237,7 +253,7 @@ public class JsParserExecutor implements IPanTool { } else { throw new RuntimeException("parseById函数类型错误"); } - }); + }).onComplete(ar -> close()); } /**