From b7d2cdc53fa54b001c59123ead3073332dc0f645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Wed, 26 Feb 2025 17:44:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81=E6=94=B9=E4=B8=BA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8ScheduledExecutorService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/qyft/gd/service/StatusService.java | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/qyft/gd/service/StatusService.java b/src/main/java/com/qyft/gd/service/StatusService.java index fd02b98..d383967 100644 --- a/src/main/java/com/qyft/gd/service/StatusService.java +++ b/src/main/java/com/qyft/gd/service/StatusService.java @@ -4,38 +4,35 @@ import com.qyft.gd.common.constant.WebSocketMessageType; import com.qyft.gd.device.model.bo.DeviceStatus; import com.qyft.gd.device.service.DeviceStateService; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; @Slf4j @Service +@RequiredArgsConstructor public class StatusService { private final WebSocketService webSocketService; private final DeviceStateService deviceStateService; - private Timer timer; - - @Autowired - public StatusService(WebSocketService webSocketService, DeviceStateService deviceStateService) { - this.webSocketService = webSocketService; - this.deviceStateService = deviceStateService; - } @PostConstruct public void init() { - timer = new Timer(); - TimerTask task = new TimerTask() { - @Override - public void run() { + ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + executorService.scheduleAtFixedRate(() -> { + try { DeviceStatus deviceStatus = deviceStateService.getDeviceStatus(); webSocketService.pushMsg(WebSocketMessageType.STATUS, deviceStatus); + } catch (Exception e) { + if (!executorService.isShutdown()) { + executorService.shutdown(); // 关闭 ScheduledExecutorService + } + log.error("定时推送设备状态异常", e); } - }; - - timer.schedule(task, 10, 100); + }, 10, 100, TimeUnit.MILLISECONDS); } }