From f25b35f576e353cc525182e14a5f68462b48d62b Mon Sep 17 00:00:00 2001 From: jiangqixiang Date: Wed, 8 May 2024 16:44:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9BUG=20spring=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E5=85=B3=E9=97=AD=E5=90=8E=20=E9=81=97=E7=95=99=20mag?= =?UTF-8?q?ic-api=20=E7=BA=BF=E7=A8=8B=EF=BC=8C=E5=AF=BC=E8=87=B4=20JVM=20?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=AD=20issues:=20https://gitee.?= =?UTF-8?q?com/ssssssss-team/magic-api/issues/I5BGZ6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/config/WebSocketSessionManager.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java index 1e6d5b58..5b008784 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java @@ -2,6 +2,9 @@ package org.ssssssss.magicapi.core.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import org.ssssssss.magicapi.core.event.EventAction; import org.ssssssss.magicapi.core.context.MagicConsoleSession; @@ -17,7 +20,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -public class WebSocketSessionManager { +@Component +public class WebSocketSessionManager implements CommandLineRunner, DisposableBean { private static final Logger logger = LoggerFactory.getLogger(WebSocketSessionManager.class); @@ -43,13 +47,27 @@ public class WebSocketSessionManager { return SESSIONS.get(clientId); } - static { - // 1秒1次发送日志 - new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-send-log-task")).scheduleAtFixedRate(WebSocketSessionManager::flushLog, 1, 1, TimeUnit.SECONDS); - // 60秒检测一次是否在线 - new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")).scheduleAtFixedRate(WebSocketSessionManager::checkSession, CHECK_INTERVAL, CHECK_INTERVAL, TimeUnit.SECONDS); + private ScheduledThreadPoolExecutor logExecutor; + private ScheduledThreadPoolExecutor wsExecutor; + @Override + public void destroy() { + if (logExecutor != null) { + logExecutor.shutdown(); + } + if (wsExecutor != null) { + wsExecutor.shutdown(); + } } + @Override + public void run(String... args) throws Exception { + // 1秒1次发送日志 + logExecutor = new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-send-log-task")); + logExecutor.scheduleAtFixedRate(WebSocketSessionManager::flushLog, 1, 1, TimeUnit.SECONDS); + // 60秒检测一次是否在线 + wsExecutor = new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")); + wsExecutor.scheduleAtFixedRate(WebSocketSessionManager::checkSession, CHECK_INTERVAL, CHECK_INTERVAL, TimeUnit.SECONDS); + } public static Collection getSessions() { return SESSIONS.values(); } From 7b41e7998dccd622b31113bc7cc28b8bdfd636fa Mon Sep 17 00:00:00 2001 From: jiangqixiang Date: Wed, 8 May 2024 17:16:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9BUG=20spring=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E5=85=B3=E9=97=AD=E5=90=8E=20=E9=81=97=E7=95=99=20mag?= =?UTF-8?q?ic-api=20=E7=BA=BF=E7=A8=8B=EF=BC=8C=E5=AF=BC=E8=87=B4=20JVM=20?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=AD=20issues:=20https://gitee.?= =?UTF-8?q?com/ssssssss-team/magic-api/issues/I5BGZ6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/service/TaskMagicDynamicRegistry.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java index f8e93100..0dd56947 100644 --- a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java +++ b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java @@ -2,8 +2,10 @@ package org.ssssssss.magicapi.task.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; import org.springframework.context.event.EventListener; import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ExecutorConfigurationSupport; import org.springframework.scheduling.config.CronTask; import org.springframework.scheduling.support.CronTrigger; import org.ssssssss.magicapi.core.config.MagicConfiguration; @@ -16,8 +18,9 @@ import org.ssssssss.magicapi.utils.ScriptManager; import org.ssssssss.script.MagicScriptContext; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadPoolExecutor; -public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry { +public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry implements DisposableBean { private final TaskScheduler taskScheduler; @@ -99,4 +102,14 @@ public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry Date: Thu, 16 May 2024 09:32:14 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9BUG=20spring=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E5=85=B3=E9=97=AD=E5=90=8E=20=E9=81=97=E7=95=99=20mag?= =?UTF-8?q?ic-api=20=E7=BA=BF=E7=A8=8B=EF=BC=8C=E5=AF=BC=E8=87=B4=20JVM=20?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=AD=20issues:=20https://gitee.?= =?UTF-8?q?com/ssssssss-team/magic-api/issues/I5BGZ6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/boot/starter/MagicAPIAutoConfiguration.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java index fb9681c0..18d3a6be 100644 --- a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java +++ b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java @@ -290,6 +290,10 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon })); } + @Bean + public WebSocketSessionManager magicWebSocketSessionManager(){ + return new WebSocketSessionManager(); + } @Bean public MagicConfiguration magicConfiguration(List languageProviders, org.ssssssss.magicapi.core.resource.Resource magicResource,