/// <summary> /// 更新任务通过盘点计划(已有同样的任务的时候) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="trigger"></param> /// <param name="groupName"></param> /// <param name="jobDetailName"></param> public async Task SchedulerUpdateByPlan(InventoryPlan inventoryPlan) { if (Scheduler == null) { CreateScheduler(); } var triggerKey = GetTriggerKeyByPlan(inventoryPlan); var trigger = (ICronTrigger)await Scheduler.GetTrigger(triggerKey); var currentCron = QuartzUtils.GetQuartzCron(inventoryPlan); //处理是否更新任务的定时时间 if (trigger.CronExpressionString != currentCron) { var triggerNew = TriggerBuilder.Create() .WithIdentity(triggerKey.Name, triggerKey.Group) .ForJob(trigger.JobKey) .WithCronSchedule(currentCron) .Build(); await Scheduler.RescheduleJob(trigger.Key, triggerNew); } //处理是否更新任务的执行状态 TriggerState triggerState = await Scheduler.GetTriggerState(triggerKey); switch (triggerState) { case TriggerState.Normal: if (!inventoryPlan.Enabled) { await Scheduler.PauseTrigger(triggerKey); } break; case TriggerState.Paused: if (inventoryPlan.Enabled) { await Scheduler.ResumeTrigger(triggerKey); } break; //如果处于其他状态,暂不进行任何处理 default: LogUtils.Error($"{triggerKey.Name}定时任务更新时,原定时任务出现其他状态{triggerState.ToString()}"); break; } }
public override void Up() { QuartzUtils.AddQuartzIndexes(x => Sql(x)); }
public override void Down() { QuartzUtils.RollbackQuartzIndexes(x => Sql(x)); }
/// <summary> /// 开始任务通过盘点计划 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="trigger"></param> /// <param name="groupName"></param> /// <param name="jobDetailName"></param> public async Task SchedulerStartByPlan(InventoryPlan inventoryPlan) { if (Scheduler == null) { CreateScheduler(); } var currentTrigger = CustomizeTrigger.GetExecuteInventoryPlanTrigger(inventoryPlan.id, QuartzUtils.GetQuartzCron(inventoryPlan)); IJobDetail jobDetail = JobBuilder.Create <ExecuteInventoryPlanJoB>().WithIdentity(inventoryPlan.id, GroupName.ExecuteInventoryPlan.ToString()).Build(); //将任务与触发器添加到调度器中 await Scheduler.ScheduleJob(jobDetail, currentTrigger); //开始执行 await Scheduler.Start(); }