From 2e0127d60919b3e2006057a48e0c4c464b4ef6ea Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:04:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B3=A8=E5=86=8C=20JVM=20ShutdownHook?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=20Vert.x=20=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B=E9=80=80=E5=87=BA=E6=97=B6=E4=B8=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E7=9A=84=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 Deploy.deployVerticle() 中创建的 Vert.x 实例是局部变量,进程退出时无法优雅关闭, 导致 Netty EventLoopGroup、JDBC 连接池、内部定时器等资源泄漏。 添加 ShutdownHook 在 JVM 关闭时调用 vertx.close() 级联释放所有资源。 --- core/src/main/java/cn/qaiu/vx/core/Deploy.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 e6717be..0775c9f 100644 --- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java +++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java @@ -43,6 +43,7 @@ public final class Deploy { private Handler handle; private Thread mainThread; + private Vertx mainVertx; public static Deploy instance() { return INSTANCE; @@ -137,6 +138,14 @@ 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())); + })); //配置保存在共享数据中 var sharedData = vertx.sharedData(); LocalMap localMap = sharedData.getLocalMap(LOCAL);