From 21e8a370c342d4ca38749351cd6cd968115cc0c0 Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:58:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ShutdownHook=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=AD=89=E5=BE=85=20vertx.close()=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20JVM=20=E6=8F=90=E5=89=8D=E9=80=80=E5=87=BA?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=B5=84=E6=BA=90=E6=9C=AA=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 审查发现 vertx.close() 是异步操作,ShutdownHook 线程提交关闭任务后立即退出, JVM 在资源实际释放前就终止了,与未修复时行为等价。 改为 CompletableFuture.get(10s) 阻塞等待,超时有 warn 日志。 同时移除无用的 mainVertx 字段,修正 JsExecUtils 误导性注释。 --- core/src/main/java/cn/qaiu/vx/core/Deploy.java | 10 ++++++---- parser/src/main/java/cn/qaiu/util/JsExecUtils.java | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/cn/qaiu/vx/core/Deploy.java b/core/src/main/java/cn/qaiu/vx/core/Deploy.java index 0775c9f..1645751 100644 --- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java +++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java @@ -43,7 +43,6 @@ public final class Deploy { private Handler handle; private Thread mainThread; - private Vertx mainVertx; public static Deploy instance() { return INSTANCE; @@ -138,13 +137,16 @@ public final class Deploy { vertxOptions.getWorkerPoolSize()); var vertx = Vertx.vertx(vertxOptions); VertxHolder.init(vertx); - this.mainVertx = vertx; // 注册 ShutdownHook,确保进程退出时优雅关闭资源 Runtime.getRuntime().addShutdownHook(new Thread(() -> { LOGGER.info("JVM shutting down, closing Vert.x..."); - vertx.close().onComplete(ar -> - LOGGER.info("Vert.x closed: {}", ar.succeeded() ? "success" : ar.cause().getMessage())); + try { + vertx.close().toCompletionStage().toCompletableFuture().get(10, java.util.concurrent.TimeUnit.SECONDS); + LOGGER.info("Vert.x closed successfully"); + } catch (Exception e) { + LOGGER.warn("Vert.x close error or timeout", e); + } })); //配置保存在共享数据中 var sharedData = vertx.sharedData(); diff --git a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java index 6ae420f..453a294 100644 --- a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java +++ b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java @@ -62,7 +62,7 @@ public class JsExecUtils { /** - * 调用执行js文件(复用已缓存的引擎实例,避免每次创建) + * 调用执行js文件(使用缓存的 ScriptEngineManager 创建新引擎实例) */ public static Object executeOtherJs(String jsText, String funName, Object ... args) throws ScriptException, NoSuchMethodException {