Bladeren bron

:fix:修改游戏监控任务

zhangxianyu 1 jaar geleden
bovenliggende
commit
61b4395743

+ 35 - 27
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/task/GameMonitorAlarmTask.java

@@ -37,8 +37,6 @@ public class GameMonitorAlarmTask {
     @Resource
     private AliSmsService aliSmsService;
 
-    private ExecutorService taskScheduler = Executors.newSingleThreadExecutor();
-
 
     @Value("${sys-config.task_is_run}")
     private boolean run;
@@ -49,34 +47,44 @@ public class GameMonitorAlarmTask {
     @Scheduled(cron = "0 */5 * * * *")
     public void run() {
         log.info("游戏监控告警定时任务开始.");
-        log.info("run{}", run);
-        Future<?> future =  taskScheduler.submit(()->{
-            try {
-                log.info("游戏监控在线程里开始执行");
-                if (!run) {
-                    log.info("游戏监控告警定时任务本地不执行.");
-                    return;
-                }
-                try {
-                    log.info("进入告警方法");
-                    gameMonitorAlarmService.sendMsgToUser();
-                    log.info("游戏监控告警定时任务结束.");
-                } catch (Exception e) {
-                    log.info("定时任务游戏监控告警出错", e);
-                }
-            }catch (Exception e){
+        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+        Runnable task = ()->{
+           try {
+               log.info("游戏监控在线程里开始执行");
+               if (!run) {
+                   log.info("游戏监控告警定时任务本地不执行.");
+                   return;
+               }
+               try {
+                   log.info("进入告警方法");
+                   gameMonitorAlarmService.sendMsgToUser();
+                   log.info("游戏监控告警定时任务结束.");
+               } catch (Exception e) {
+                   log.info("定时任务游戏监控告警出错", e);
+               }
+           }catch (Exception e){
 
-                log.error("定时任务游戏监控告警出错", e);
-            }
-        });
+               log.error("定时任务游戏监控告警出错", e);
+           }
+        };
+        scheduler.submit(task);
+        // 使用shutdown()优雅关闭
+        scheduler.shutdown();
         try {
-            //两分钟执行不完就超时
-            future.get(120, TimeUnit.SECONDS);
-        } catch (Exception e) {
-            sendMsg("定时任务游戏监控告警超时");
-            log.error("定时任务游戏监控告警超时", e);
-            future.cancel(true);
+            // 等待所有任务完成,最多等待120秒
+            if (!scheduler.awaitTermination(120, TimeUnit.SECONDS)) {
+                log.info("线程池关闭超时,可能有任务未完成");
+            }
+        } catch (InterruptedException e) {
+            // 当前线程被中断,通常应重新中断自己
+            log.info("线程池关闭时当前线程被中断");
+            Thread.currentThread().interrupt();
+
         }
+
+        // 或使用shutdownNow()强制关闭
+        List<Runnable> notStartedTasks = scheduler.shutdownNow();
+        log.info("已取消 " + notStartedTasks.size() + " 个任务");
     }
 
     private void sendMsg(String msg) {