修改BUG spring容器关闭后 遗留 magic-api 线程,导致 JVM 无法关闭
issues: https://gitee.com/ssssssss-team/magic-api/issues/I5BGZ6
This commit is contained in:
parent
b316c7f725
commit
f25b35f576
@ -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<MagicConsoleSession> getSessions() {
|
||||
return SESSIONS.values();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user