|
@@ -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) {
|