From b78295e8da96c3e5e76befeef9582ce5273dbb74 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 29 九月 2026 13:10:23 +0800
Subject: [PATCH] 按代码规范检查整改实体注释、Service Javadoc 与分层边界

---
 ruoyi-admin/src/main/java/com/battery/business/web/TestLiveStream.java |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/battery/business/web/TestLiveStream.java b/ruoyi-admin/src/main/java/com/battery/business/web/TestLiveStream.java
index 9420d2d..3e8dd81 100644
--- a/ruoyi-admin/src/main/java/com/battery/business/web/TestLiveStream.java
+++ b/ruoyi-admin/src/main/java/com/battery/business/web/TestLiveStream.java
@@ -3,6 +3,7 @@
 import java.util.Map;
 import java.util.concurrent.*;
 import jakarta.annotation.PreDestroy;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import com.battery.business.service.ITestLiveService;
@@ -11,8 +12,23 @@
 @Component
 public class TestLiveStream {
     private final ITestLiveService live;
-    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
+    /**
+     * SSE 推送线程池显式创建并命名,便于按连接排查推送任务。
+     *
+     * <p>连接关闭后立即移除已取消的定点任务,避免取消任务在延迟队列里滞留到下一个周期。</p>
+     */
+    private final ScheduledThreadPoolExecutor scheduler = scheduler();
     public TestLiveStream(ITestLiveService live) { this.live = live; }
+
+    private static ScheduledThreadPoolExecutor scheduler()
+    {
+        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2,
+                BasicThreadFactory.builder().namingPattern("sse-live-pool-%d").daemon(true).build());
+        executor.setRemoveOnCancelPolicy(true);
+        return executor;
+    }
+
+    /** 建立指定测试的 SSE 连接,先推一次当前状态,随后每 3 秒推一次;连接完成、超时或出错时取消该推送任务。 */
     public SseEmitter stream(Long testId)
     {
         SseEmitter emitter = createEmitter();

--
Gitblit v1.7.1