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()); } /**