From 0a4d548b6bf9cfef252400fb6d6612e45cf5b602 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 27 十月 2026 13:21:23 +0800
Subject: [PATCH] fix(scheduler): 修复定时任务调度问题并增强系统稳定性
---
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java | 25 +++++++++++++++++++++++--
1 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
index a6179f6..3614a39 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -2,6 +2,7 @@
import com.ruoyi.inspectiontask.pojo.TimingTask;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.stereotype.Service;
@@ -13,6 +14,7 @@
import java.util.stream.Collectors;
@Service
+@Slf4j
@RequiredArgsConstructor
public class TimingTaskScheduler {
@@ -36,7 +38,13 @@
// 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
Trigger oldTrigger = scheduler.getTrigger(triggerKey);
if (!(oldTrigger instanceof CronTrigger)) {
- throw new SchedulerException("Existing trigger is not a CronTrigger");
+ // 瑙﹀彂鍣ㄤ笉瀛樺湪锛堥娆¢儴缃插悗浠庢湭娉ㄥ唽锛屾垨璋冨害璁板綍琚竻鐞嗭級锛屾敼涓洪噸鏂板垱寤�
+ JobKey jobKey = new JobKey("timingTask_" + task.getId());
+ if (scheduler.checkExists(jobKey)) {
+ scheduler.deleteJob(jobKey);
+ }
+ scheduleTimingTask(task);
+ return;
}
// 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
@@ -45,7 +53,8 @@
.withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
.forJob(oldTrigger.getJobKey()) // 鍏宠仈瀵瑰簲鐨凧ob
.withSchedule(CronScheduleBuilder
- .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+ .cronSchedule(convertToCronExpression(task))
+ .withMisfireHandlingInstructionDoNothing()
)
// 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
.startAt(task.getNextExecutionTime() != null
@@ -66,6 +75,18 @@
}
/**
+ * 纭繚浠诲姟宸插湪璋冨害鍣ㄤ腑锛屾湭娉ㄥ唽鏃惰ˉ娉ㄥ唽锛堝簲鐢ㄥ惎鍔ㄦ椂鎭㈠浣跨敤锛�
+ */
+ public void ensureScheduled(TimingTask task) throws SchedulerException {
+ JobKey jobKey = new JobKey("timingTask_" + task.getId());
+ if (scheduler.checkExists(jobKey)) {
+ return;
+ }
+ scheduleTimingTask(task);
+ log.info("琛ユ敞鍐屽贰妫�瀹氭椂浠诲姟: id={}, name={}", task.getId(), task.getTaskName());
+ }
+
+ /**
* 鏆傚仠浠诲姟
*/
public void pauseTimingTask(Long taskId) throws SchedulerException {
--
Gitblit v1.9.3