From 10b88a7ff17caf92f3d4e8a550c1085a70c2517a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 28 五月 2026 17:43:26 +0800
Subject: [PATCH] Merge dev_New_pro into dev_山西_晋和园_pro
---
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java | 50 +++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 39 insertions(+), 11 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 ec7a8e3..3913b8b 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -25,13 +25,25 @@
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