/// <summary> /// 创建SimpleTrigger触发器(简单触发器) /// </summary> /// <param name="sysSchedule"></param> /// <param name="starRunTime"></param> /// <param name="endRunTime"></param> /// <returns></returns> private ITrigger CreateSimpleTrigger(SysSchedule sysSchedule) { if (sysSchedule.RunTimes > 0) { ITrigger trigger = TriggerBuilder.Create() .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) .StartAt(sysSchedule.BeginTime.Value) .EndAt(sysSchedule.EndTime.Value) .WithSimpleSchedule(x => x.WithIntervalInSeconds(sysSchedule.IntervalSecond) .WithRepeatCount(sysSchedule.RunTimes)).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build(); return(trigger); } else { ITrigger trigger = TriggerBuilder.Create() .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) .StartAt(sysSchedule.BeginTime.Value) .EndAt(sysSchedule.EndTime.Value) .WithSimpleSchedule(x => x.WithIntervalInSeconds(sysSchedule.IntervalSecond) .RepeatForever()).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build(); return(trigger); } // 触发作业立即运行,然后每10秒重复一次,无限循环 }
/// <summary> /// 暂停一个指定的计划任务 /// </summary> /// <returns></returns> public async Task <JobResuleModel> StopScheduleJobAsync(SysSchedule sysSchedule) { var result = new JobResuleModel(); try { JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); if (!await _scheduler.Result.CheckExists(jobKey)) { result.IsSuccess = false; result.Message = $"未找到要暂停的任务:【{sysSchedule.Name}】"; return(result); } else { await this._scheduler.Result.PauseJob(jobKey); result.IsSuccess = true; result.Message = $"暂停任务:【{sysSchedule.Name}】成功"; return(result); } } catch (Exception) { throw; } }
public async Task <bool> UpdateScheduleAsync(SysSchedule sysSchedule) { sysSchedule.UpdateDate = DateTime.Now; return(await _scheduleRepositoty.UpdateNotQueryAsync(sysSchedule, x => x.Name, x => x.JobGroup, x => x.Cron, x => x.UpdateDate, x => x.UpdateName, x => x.UpdateId , x => x.AssemblyName, x => x.ClassName, x => x.Remark, x => x.RunTimes, x => x.BeginTime, x => x.BeginTime, x => x.EndTime, x => x.TriggerType, x => x.IntervalSecond, x => x.IsStart) > 0); }
/// <summary> /// 创建类型Cron的触发器 /// </summary> /// <param name="m"></param> /// <returns></returns> private ITrigger CreateCronTrigger(SysSchedule sysSchedule) { // 作业触发器 return(TriggerBuilder.Create() .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) .StartAt(sysSchedule.BeginTime.Value) //开始时间 .EndAt(sysSchedule.EndTime.Value) //结束数据 .WithCronSchedule(sysSchedule.Cron) //指定cron表达式 .ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup) //作业名称 .Build()); }
public async Task <MessageModel <string> > UpdateSchedule([FromBody] SysSchedule sysRole) { var data = new MessageModel <string>(); data.success = await _scheduleServer.UpdateScheduleAsync(sysRole); if (data.success) { data.msg = "角色修改成功"; } return(data); }
/// <summary> /// 创建SimpleTrigger触发器(简单触发器) /// </summary> /// <param name="sysSchedule"></param> /// <param name="starRunTime"></param> /// <param name="endRunTime"></param> /// <returns></returns> private ITrigger CreateSimpleTrigger(SysSchedule sysSchedule) { // 触发作业立即运行,然后每10秒重复一次,无限循环 ITrigger trigger = TriggerBuilder.Create() .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup) .StartAt(sysSchedule.BeginTime.Value) .EndAt(sysSchedule.EndTime.Value) .WithSimpleSchedule(x => x.WithIntervalInSeconds(sysSchedule.IntervalSecond) .RepeatForever()).Build(); return(trigger); }
public async Task <MessageModel <string> > AddSchedule([FromBody] SysSchedule sysSchedule) { var data = new MessageModel <string>(); data.success = await _scheduleServer.AddScheduleAsync(sysSchedule); if (data.success) { data.msg = "任务添加成功"; } else { data.msg = "任务添加失败"; } return(data); }
/// <summary> /// 恢复指定的计划任务 /// </summary> /// <param name="sysSchedule"></param> /// <returns></returns> public async Task <JobResuleModel> ResumeJob(SysSchedule sysSchedule) { var result = new JobResuleModel(); try { JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); if (!await _scheduler.Result.CheckExists(jobKey)) { result.IsSuccess = false; result.Message = $"未找到要重新的任务:【{sysSchedule.Name}】,请先选择添加计划!"; return(result); } await this._scheduler.Result.ResumeJob(jobKey); result.IsSuccess = true; result.Message = $"恢复计划任务:【{sysSchedule.Name}】成功"; return(result); } catch (Exception) { throw; } }
public async Task <bool> AddScheduleAsync(SysSchedule sysSchedule) { return(await this._scheduleRepositoty.InsertAsync(sysSchedule)); }
public bool AddSchedule(SysSchedule sysSchedule) { return(this._scheduleRepositoty.Insert(sysSchedule)); }
/// <summary> /// 添加一个计划任务(映射程序集指定IJob实现类) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sysSchedule"></param> /// <returns></returns> public async Task <JobResuleModel> AddScheduleJobAsync(SysSchedule sysSchedule) { var result = new JobResuleModel(); try { if (sysSchedule != null) { JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); if (await _scheduler.Result.CheckExists(jobKey)) { result.IsSuccess = false; result.Message = $"该任务计划已经在执行:【{sysSchedule.Name}】,请勿重复启动!"; return(result); } #region 设置开始时间和结束时间 if (sysSchedule.BeginTime == null) { sysSchedule.BeginTime = DateTime.Now; } DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(sysSchedule.BeginTime, 1);//设置开始时间 if (sysSchedule.EndTime == null) { sysSchedule.EndTime = DateTime.MaxValue.AddDays(-1); } DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(sysSchedule.EndTime, 1);//设置暂停时间 #endregion #region 通过反射获取程序集类型和类 Assembly assembly = Assembly.Load(new AssemblyName(sysSchedule.AssemblyName)); Type jobType = assembly.GetType(sysSchedule.AssemblyName + "." + sysSchedule.ClassName); #endregion //判断任务调度是否开启 if (!_scheduler.Result.IsStarted) { await StartScheduleAsync(); } //传入反射出来的执行程序集 IJobDetail job = new JobDetailImpl(sysSchedule.Id.ToString(), sysSchedule.JobGroup, jobType); //Job执行时的参数还有待解决????????????????????? ITrigger trigger; #region 泛型传递 //IJobDetail job = JobBuilder.Create<T>() // .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup) // .Build(); #endregion if (!sysSchedule.Cron.IsNullOrEmpty() && CronExpression.IsValidExpression(sysSchedule.Cron) && sysSchedule.TriggerType > 0) { trigger = CreateCronTrigger(sysSchedule); } else { trigger = CreateSimpleTrigger(sysSchedule); } // 告诉Quartz使用我们的触发器来安排作业 await _scheduler.Result.ScheduleJob(job, trigger); //await Task.Delay(TimeSpan.FromSeconds(120)); //await Console.Out.WriteLineAsync("关闭了调度器!"); //await _scheduler.Result.Shutdown(); result.IsSuccess = true; result.Message = $"启动任务:【{sysSchedule.Name}】成功"; return(result); } else { result.IsSuccess = false; result.Message = $"任务计划不存在:【{sysSchedule.Name}】"; return(result); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 添加或修改调度 /// </summary> /// <param name="schedule"></param> /// <returns></returns> public async Task <bool> AddOrUpdateAsync(SysSchedule schedule) { return(schedule.JobId > 0 ? await databaseFixture.Db.SysSchedule.UpdateScheduleAsync(schedule) //编辑 : await databaseFixture.Db.SysSchedule.AddSceduleAsync(schedule)); //新增 }
public async Task <bool> AddOrUpdateAsync([FromBody] SysSchedule schedule) { return(await scheduleService.AddOrUpdateAsync(schedule)); }