Commit 7576b766 authored by wanghao's avatar wanghao

1测试上电断电操作

parent 0ca06286
......@@ -84,39 +84,46 @@ public class DeviceTaskScheduler {
* 创建71小时后执行任务
*/
private void createFinalExecutionJob(Long fStoreyId,String fPowerOutageIp,Integer fPowerOutagePort) throws SchedulerException {
// 1. 构建任务唯一标识(JobKey = jobId + 任务组名)
String jobId = "FINAL_" + fStoreyId;
JobKey jobKey = new JobKey(jobId, JOB_GROUP);
// 构建触发器唯一标识(TriggerKey = jobId + "_TRIGGER" + 触发器组名)
TriggerKey triggerKey = new TriggerKey(jobId + "_TRIGGER", TRIGGER_GROUP);
// 2. 准备JobDetail(与原有逻辑一致,仅初始化不提交)
String fStoreyIdStr = fStoreyId.toString();
String fPowerOutagePortStr = fPowerOutagePort.toString();
JobDetail job = JobBuilder.newJob(FinalExecutionJob.class)
.withIdentity(jobKey) // 直接用构建好的JobKey
.usingJobData("fStoreyId", fStoreyIdStr)
.withIdentity(jobKey)
.usingJobData("fStoreyId", fStoreyId.toString())
.usingJobData("fPowerOutageIp", fPowerOutageIp)
.usingJobData("fPowerOutagePort", fPowerOutagePortStr)
.storeDurably() // 保留原有持久化配置
.usingJobData("fPowerOutagePort", fPowerOutagePort.toString())
.storeDurably()
.build();
// 3. 准备新触发器(定时一次执行,测试用10分钟后,后续可改回71小时)
Date executeTime = Date.from(Instant.now().plus(10, ChronoUnit.MINUTES)); // 测试用10分钟,正式环境改71
Trigger newTrigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey) // 用构建好的TriggerKey
.startAt(executeTime) // 指定执行时间(一次触发)
// 修复触发器配置:明确使用一次性触发器
Date executeTime = Date.from(Instant.now().plus(10, ChronoUnit.MINUTES));
SimpleTrigger newTrigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.startAt(executeTime)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withMisfireHandlingInstructionFireNow()) // 添加错过执行的处理策略
.build();
// 4. 分场景处理:存在则更新,不存在则创建
// 修复更新逻辑:先删除再添加,避免冲突
if (scheduler.checkExists(jobKey)) {
// 任务已存在:更新触发器(重新指定执行时间)
Date updatedTime = scheduler.rescheduleJob(triggerKey, newTrigger);
log.info("71小时后执行任务[{}]已存在,成功更新触发器,新执行时间:{}", jobId, updatedTime);
// 删除旧触发器,避免冲突
if (scheduler.checkExists(triggerKey)) {
scheduler.unscheduleJob(triggerKey);
}
scheduler.scheduleJob(newTrigger);
log.info("71小时后执行任务[{}]已存在,成功更新触发器,新执行时间:{}", jobId, executeTime);
} else {
// 任务不存在:创建JobDetail和触发器
scheduler.scheduleJob(job, newTrigger);
log.info("71小时后执行任务[{}]不存在,成功创建任务及触发器,执行时间:{}", jobId, executeTime);
}
// 验证触发器状态
Trigger trigger = scheduler.getTrigger(triggerKey);
if (trigger != null) {
log.info("最终任务触发器[{}]下次执行时间: {}", triggerKey, trigger.getNextFireTime());
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment