/// <summary> /// 创建SimpleTrigger触发器(简单触发器) /// </summary> /// <param name="sysSchedule"></param> /// <param name="starRunTime"></param> /// <param name="endRunTime"></param> /// <returns></returns> private ITrigger CreateSimpleTrigger(TasksQzEntity qzModel) { if (qzModel.RunTimes > 0) { ITrigger trigger = TriggerBuilder.Create() .StartNow() .WithIdentity(qzModel.Id.ToString(), qzModel.AppId) .WithSimpleSchedule(x => x.WithIntervalInSeconds(qzModel.IntervalSecond) .WithRepeatCount(qzModel.RunTimes))//指定了执行次数 .ForJob(qzModel.Id.ToString(), qzModel.AppId).Build(); return(trigger); } else { ITrigger trigger = TriggerBuilder.Create() .StartNow() .WithIdentity(qzModel.Id.ToString(), qzModel.AppId) .WithSimpleSchedule(x => x.WithIntervalInSeconds(qzModel.IntervalSecond) .RepeatForever()).ForJob(qzModel.Id.ToString(), qzModel.AppId).Build(); return(trigger); } // 触发作业立即运行,然后每10秒重复一次,无限循环 }
public async Task <bool> UpdateAsync(TasksQzEntity qz) { _dbContext.Update(qz); var x = await _dbContext.SaveChangesAsync(); var result = x > 0; return(result); }
public async Task <bool> AddAsync(TasksQzEntity qz) { await _dbContext.TasksQzs.AddAsync(qz); int x = await _dbContext.SaveChangesAsync(); var result = x > 0; return(result); }
/// <summary> /// 创建类型Cron的触发器 /// </summary> /// <param name="m"></param> /// <returns></returns> private ITrigger CreateCronTrigger(TasksQzEntity qzModel) { // 作业触发器 return(TriggerBuilder.Create() .WithIdentity(qzModel.Id.ToString(), qzModel.AppId) //.StartAt(qzModel.BeginTime.Value)//开始时间 //.EndAt(qzModel.EndTime.Value)//结束数据 .WithCronSchedule(qzModel.Cron) //指定cron表达式 .StartNow() .ForJob(qzModel.Id.ToString(), qzModel.AppId) //作业名称 .Build()); }
/// <summary> /// 恢复指定的计划任务 /// </summary> /// <param name="tasksQz"></param> /// <returns></returns> public async Task <MessageModel <string> > ResumeJob(TasksQzEntity qzModel) { var result = new MessageModel <string>(); try { JobKey jobKey = new JobKey(qzModel.Id.ToString(), qzModel.AppId); if (!await _scheduler.CheckExists(jobKey)) { result.success = false; result.msg = $"未找到要重新的任务:【{qzModel.Name}】,请先选择添加计划!"; return(result); } //await this._scheduler.ResumeJob(jobKey); //await this._scheduler.TriggerJob(jobKey);//立即执行 //_scheduler.RescheduleJob(triggerKey, trigger);//更新时间表达式、 //_scheduler.GetCurrentlyExecutingJobs ITrigger trigger; if (qzModel.Cron != null && CronExpression.IsValidExpression(qzModel.Cron) && qzModel.IsCron) { trigger = CreateCronTrigger(qzModel); } else { trigger = CreateSimpleTrigger(qzModel); } TriggerKey triggerKey = new TriggerKey(qzModel.Id.ToString(), qzModel.AppId); await _scheduler.RescheduleJob(triggerKey, trigger); result.success = true; result.msg = $"恢复计划任务:【{qzModel.Name}】成功"; return(result); } catch (Exception) { throw; } }
/// <summary> /// 暂停一个指定的计划任务 /// </summary> /// <returns></returns> public async Task <MessageModel <string> > StopScheduleJobAsync(TasksQzEntity qzModel) { var result = new MessageModel <string>(); try { JobKey jobKey = new JobKey(qzModel.Id.ToString(), qzModel.AppId); if (!await _scheduler.CheckExists(jobKey)) { result.success = false; result.msg = $"未找到要停止的任务:【{qzModel.Name}】"; return(result); } else { //暂停还在_scheduler中,这边直接移除 await this._scheduler.PauseJob(jobKey); //var aaaa = await this._scheduler.GetTriggersOfJob(jobKey); //var sss = await this._scheduler.IsJobGroupPaused(qzModel.AppId); //var sss2 = await this._scheduler.GetJobGroupNames(); //var bbbb = this._scheduler.TriggerJob(aaaa.First().JobKey); var res = await this._scheduler.DeleteJob(jobKey); if (!res) { await this._scheduler.ResumeJob(jobKey); result.msg = $"停止任务:【{qzModel.Name}】失败"; return(result); } result.success = true; result.msg = $"停止任务:【{qzModel.Name}】成功"; return(result); } } catch (Exception) { throw; } }
/// <summary> /// 添加一个计划任务(映射程序集指定IJob实现类) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tasksQz"></param> /// <returns></returns> public async Task <MessageModel <string> > AddScheduleJobAsync(TasksQzEntity tasksQz) { var result = new MessageModel <string>(); if (tasksQz != null) { try { JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.AppId); if (await _scheduler.CheckExists(jobKey)) { result.success = false; result.msg = $"该任务计划已经在执行:【{tasksQz.Name}】,请勿重复启动!"; return(result); } #region 通过反射获取程序集类型和类 Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName)); Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName); #endregion //判断任务调度是否开启 if (!_scheduler.IsStarted) { await StartScheduleAsync(); } #region 泛型传递 //传入反射出来的执行程序集 //IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.AppId, jobType); //job.JobDataMap.Add("JobParam", tasksQz.JobParams); IJobDetail jobdetail = JobBuilder.Create(jobType).WithIdentity(tasksQz.Id.ToString(), tasksQz.AppId).Build(); //IJobDetail job = JobBuilder.Create<T>() // .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup) // .Build(); #endregion ITrigger trigger; if (tasksQz.Cron != null && CronExpression.IsValidExpression(tasksQz.Cron) && tasksQz.IsCron) { trigger = CreateCronTrigger(tasksQz); } else { //tasksQz.IntervalSecond = 5; trigger = CreateSimpleTrigger(tasksQz); } // 告诉Quartz使用我们的触发器来安排作业 await _scheduler.ScheduleJob(jobdetail, trigger); result.success = true; result.msg = $"启动任务:【{tasksQz.Name}】成功"; return(result); } catch (Exception ex) { result.success = false; result.msg = $"任务计划异常:【{ex.Message}】"; return(result); } } else { result.success = false; result.msg = $"任务计划不存在:【{tasksQz?.Name}】"; return(result); } }