| | |
| | | try{ |
| | | TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId()); |
| | | |
| | | // 获取现有触发器并转换为 CronTrigger |
| | | // 获取现有触发器 |
| | | Trigger oldTrigger = scheduler.getTrigger(triggerKey); |
| | | // 不存在则添加 |
| | | if (oldTrigger == null) { |
| | | scheduleMaintenanceTask(task); |
| | | return; |
| | | } |
| | | |
| | | if (!(oldTrigger instanceof CronTrigger)) { |
| | | throw new SchedulerException("Existing trigger is not a CronTrigger"); |
| | | } |
| | | |
| | | // 3. 构建CronTrigger,确保持久化配置 |
| | | // 构建新的CronTrigger |
| | | CronTrigger newTrigger = TriggerBuilder.newTrigger() |
| | | .withIdentity(triggerKey) // 唯一标识,用于持久化存储 |
| | | .withDescription(task.getTaskName() + "_TRIGGER") // 触发器描述 |
| | | .forJob(oldTrigger.getJobKey()) // 关联对应的Job |
| | | .withIdentity(triggerKey) |
| | | .withDescription(task.getTaskName() + "_TRIGGER") |
| | | .forJob(oldTrigger.getJobKey()) |
| | | .withSchedule(CronScheduleBuilder |
| | | .cronSchedule(convertToCronExpression(task)) // 错过执行时的策略(根据业务调整) |
| | | .cronSchedule(convertToCronExpression(task)) |
| | | ) |
| | | // 4. 设置开始时间(若为null则立即生效) |
| | | .startAt(task.getNextExecutionTime() != null |
| | | ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()) |
| | | : new Date()) |