gongchunyi
2 天以前 0481b3942353f83c8506d77a0fc1a447a6942763
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -32,14 +32,36 @@
     */
    public void rescheduleTimingTask(TimingTask task) throws SchedulerException {
        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
        JobKey jobKey = new JobKey("timingTask_" + task.getId());
        // 获取现有触发器并转换为 CronTrigger
        // 获取现有触发器
        Trigger oldTrigger = scheduler.getTrigger(triggerKey);
        if (!(oldTrigger instanceof CronTrigger)) {
            throw new SchedulerException("Existing trigger is not a CronTrigger");
        if (oldTrigger == null) {
            if (!scheduler.checkExists(jobKey)) {
                JobDetail jobDetail = buildJobDetail(task);
                Trigger newTrigger = buildJobTrigger(task, jobDetail);
                scheduler.scheduleJob(jobDetail, newTrigger);
            } else {
                Trigger newTrigger = buildJobTrigger(task, scheduler.getJobDetail(jobKey));
                scheduler.scheduleJob(newTrigger);
            }
            return;
        }
        // 3. 构建CronTrigger,确保持久化配置
        if (!(oldTrigger instanceof CronTrigger)) {
            scheduler.unscheduleJob(triggerKey);
            if (!scheduler.checkExists(jobKey)) {
                JobDetail jobDetail = buildJobDetail(task);
                Trigger newTrigger = buildJobTrigger(task, jobDetail);
                scheduler.scheduleJob(jobDetail, newTrigger);
            } else {
                Trigger newTrigger = buildJobTrigger(task, scheduler.getJobDetail(jobKey));
                scheduler.scheduleJob(newTrigger);
            }
            return;
        }
        CronTrigger newTrigger = TriggerBuilder.newTrigger()
                .withIdentity(triggerKey)                // 唯一标识,用于持久化存储
                .withDescription(task.getTaskName() + "_TRIGGER") // 触发器描述
@@ -47,20 +69,11 @@
                .withSchedule(CronScheduleBuilder
                        .cronSchedule(convertToCronExpression(task)) // 错过执行时的策略(根据业务调整)
                )
                // 4. 设置开始时间(若为null则立即生效)
                // 设置开始时间(若为null则立即生效)
                .startAt(task.getNextExecutionTime() != null
                        ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
                        : new Date())
                .build();
        // 构建新触发器
//        Trigger newTrigger = TriggerBuilder.newTrigger()
//                .withIdentity(triggerKey)
//                .withDescription(task.getTaskName())
//                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
//                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
//                .forJob(oldTrigger.getJobKey())
//                .build();
        scheduler.rescheduleJob(triggerKey, newTrigger);
    }