From 66d041ed14b3ed3ed7183a28a5c588e235fc21d0 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 26 五月 2026 11:14:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_鹤壁_强信宇_pro
---
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 42 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
index 384862b..3913b8b 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -1,9 +1,9 @@
package com.ruoyi.device.service.impl;
import com.ruoyi.device.pojo.MaintenanceTask;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalTime;
@@ -19,19 +19,31 @@
*/
@Service
@Slf4j
+@RequiredArgsConstructor
public class MaintenanceTaskScheduler {
- @Autowired
- private Scheduler scheduler;
+ private final Scheduler scheduler;
/**
- * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
+ * 娣诲姞鎴栨洿鏂颁换鍔″埌璋冨害鍣�
*/
public void scheduleMaintenanceTask(MaintenanceTask task){
try {
JobDetail jobDetail = buildJobDetail(task);
Trigger trigger = buildJobTrigger(task, jobDetail);
- scheduler.scheduleJob(jobDetail, trigger);
+
+ // 妫�鏌ヨЕ鍙戝櫒鏄惁宸插瓨鍦�
+ TriggerKey triggerKey = trigger.getKey();
+ Trigger existingTrigger = scheduler.getTrigger(triggerKey);
+
+ if (existingTrigger != null) {
+ // 瑙﹀彂鍣ㄥ凡瀛樺湪锛屾洿鏂板畠
+ scheduler.rescheduleJob(triggerKey, trigger);
+ } else {
+ // 瑙﹀彂鍣ㄤ笉瀛樺湪锛屽厛纭繚 Job 瀛樺湪锛岀劧鍚庤皟搴﹁Е鍙戝櫒
+ scheduler.addJob(jobDetail, true);
+ scheduler.scheduleJob(trigger);
+ }
}catch (SchedulerException e){
log.error("SchedulerException scheduleMaintenanceTask ERROR",e);
throw new RuntimeException(e);
@@ -45,26 +57,41 @@
try{
TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId());
- // 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
+ // 鑾峰彇鐜版湁瑙﹀彂鍣�
Trigger oldTrigger = scheduler.getTrigger(triggerKey);
+
+ // 鏋勫缓鏂扮殑 JobDetail 鍜� Trigger
+ JobDetail jobDetail = buildJobDetail(task);
+ Trigger newTrigger = buildJobTrigger(task, jobDetail);
+
+ if (oldTrigger == null) {
+ // 瑙﹀彂鍣ㄤ笉瀛樺湪锛岃鏄庝换鍔′箣鍓嶈鍒犻櫎杩�
+ // 鍏堢‘淇� Job 瀛樺湪锛岀劧鍚庤皟搴﹁Е鍙戝櫒
+ scheduler.addJob(jobDetail, true);
+ scheduler.scheduleJob(newTrigger);
+ return;
+ }
+
+ // 瑙﹀彂鍣ㄥ瓨鍦紝鐩存帴鏇存柊
if (!(oldTrigger instanceof CronTrigger)) {
throw new SchedulerException("Existing trigger is not a CronTrigger");
}
- // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
- CronTrigger newTrigger = TriggerBuilder.newTrigger()
- .withIdentity(triggerKey) // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
- .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
- .forJob(oldTrigger.getJobKey()) // 鍏宠仈瀵瑰簲鐨凧ob
+ // 鏋勫缓鏂扮殑 CronTrigger
+ CronTrigger cronTrigger = TriggerBuilder.newTrigger()
+ .withIdentity(triggerKey)
+ .withDescription(task.getTaskName() + "_TRIGGER")
+ .forJob(oldTrigger.getJobKey())
.withSchedule(CronScheduleBuilder
- .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+ .cronSchedule(convertToCronExpression(task))
+ .withMisfireHandlingInstructionDoNothing()
)
- // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
.startAt(task.getNextExecutionTime() != null
? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
: new Date())
.build();
- scheduler.rescheduleJob(triggerKey, newTrigger);
+
+ scheduler.rescheduleJob(triggerKey, cronTrigger);
}catch (SchedulerException e){
log.error("SchedulerException rescheduleMaintenanceTask ERROR",e);
throw new RuntimeException(e);
@@ -93,6 +120,7 @@
public void unscheduleMaintenanceTask(Long taskId){
try {
JobKey jobKey = new JobKey("MaintenanceTask_" + taskId);
+ // 鍒犻櫎 Job 浼氳嚜鍔ㄥ垹闄ゅ叧鑱旂殑 Trigger
scheduler.deleteJob(jobKey);
}catch (SchedulerException e){
log.error("SchedulerException unscheduleMaintenanceTask ERROR",e);
--
Gitblit v1.9.3