/// <summary> /// 添加作业 /// </summary> /// <param name="taskOptions"></param> /// <param name="schedulerFactory"></param> /// <param name="init">是否初始化,否=需要重新生成配置文件,是=不重新生成配置文件</param> /// <returns></returns> public static async Task <object> AddJob(this TaskOptions taskOptions, ISchedulerFactory schedulerFactory, bool init = false) { try { //元组用于验证CRON表达式是否正确 (bool, string)validExpression = taskOptions.Interval.IsValidExpression(); if (!validExpression.Item1) { return new { status = false, msg = validExpression.Item2 } } ; //元组用于验证作业是否已经存在 (bool, object)result = taskOptions.Exists(init); if (!result.Item1) { return(result.Item2); } if (!init) { _taskList.Add(taskOptions); FileQuartz.WriteJobConfig(_taskList); } IJobDetail job = JobBuilder.Create <HttpResultful>() .WithIdentity(taskOptions.TaskName, taskOptions.GroupName) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(taskOptions.TaskName, taskOptions.GroupName) .StartNow().WithDescription(taskOptions.Describe) .WithCronSchedule(taskOptions.Interval) .Build(); IScheduler scheduler = await schedulerFactory.GetScheduler(); await scheduler.ScheduleJob(job, trigger); if (taskOptions.Status == (int)TriggerState.Normal) { await scheduler.Start(); } else { await schedulerFactory.Pause(taskOptions); //TODO:更新日志 FileQuartz.WriteStartLog($"作业:{taskOptions.TaskName},分组:{taskOptions.GroupName},新建时未启动原因,状态为:{taskOptions.Status}"); } //TODO:更新动作日志 if (!init) { FileQuartz.WriteJobAction(JobAction.新增, taskOptions.TaskName, taskOptions.GroupName); } } catch (Exception ex) { return(new { status = false, msg = ex.Message }); } return(new { status = true }); }
/// <summary> /// 添加任务调度(指定IJob实现类) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="QuartzOptions"></param> /// <returns></returns> public static async Task <QuartzResult> AddJob <T>(this ISchedulerFactory schedulerFactory, QuartzOption QuartzOptions) where T : IJob { if (QuartzOptions is null) { throw new ArgumentNullException(nameof(QuartzOptions)); } if (scheduler == null) { scheduler = schedulerFactory?.GetScheduler().Result; } try { //检查任务是否已存在 if (await scheduler.CheckExists(new JobKey(QuartzOptions.TaskName, QuartzOptions.GroupName))) { return(QuartzResult.Error($"任务 {QuartzOptions.TaskName},任务组 {QuartzOptions.GroupName} 已存在")); } // 定义这个工作,并将其绑定到我们的IJob实现类 IJobDetail jobDetail = CreateJobDetail <T>(QuartzOptions);//JobBuilder.CreateForAsync<T>().WithIdentity(Option.TaskName, Option.GroupName).Build(); // 创建触发器 ITrigger trigger; if (QuartzOptions.IntervalType == IntervalType.Cron) { if (!CronExpression.IsValidExpression(QuartzOptions.Interval)) { return(QuartzResult.Error($"请确认表达式{QuartzOptions.Interval}是否正确!")); } trigger = QuartzOptions.CreateCronTrigger(); } else { trigger = CreateSimpleTrigger(QuartzOptions); } // 设置监听器 //JobListener listener = new JobListener(); //// IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job.Key); //scheduler.ListenerManager.AddJobListener(listener, GroupMatcher<JobKey>.AnyGroup()); await scheduler.ScheduleJob(jobDetail, trigger); if (QuartzOptions.TaskStatus == TriggerState.Normal) { await scheduler.Start(); } else { await schedulerFactory.Pause(QuartzOptions); } logger.LogDebug($"作业:{QuartzOptions.TaskName},目标:{QuartzOptions.TaskTarget},分组:{QuartzOptions.GroupName},状态为:{QuartzOptions.TaskStatus}"); return(QuartzResult.Ok("添加成功")); } catch (Exception ex) { logger.LogError($"添加任务出错--{ex.StackTrace}"); return(QuartzResult.Error($"添加任务出错--{ex.StackTrace}")); } }
/// <summary> /// 添加作业 /// </summary> /// <param name="QuartzOptions"></param> /// <param name="schedulerFactory"></param> ///是否初始化,否=需要重新生成配置文件,是=不重新生成配置文件 //trigger.JobDataMap, job.JobDataMap任选一个传参 //trigger.JobDataMap.Add(typeof(HttpRequestJob).Name, Options.TaskData); /// <returns></returns> public static async Task <QuartzResult> AddJob(this ISchedulerFactory schedulerFactory, QuartzOption QuartzOptions) { if (QuartzOptions is null) { throw new ArgumentNullException(nameof(QuartzOptions)); } if (scheduler == null) { scheduler = schedulerFactory?.GetScheduler().Result; } try { if (await scheduler.CheckExists(new JobKey(QuartzOptions.TaskName, QuartzOptions.GroupName))) { return(QuartzResult.Error($"任务 {QuartzOptions.TaskName},任务组 {QuartzOptions.GroupName} 已存在")); } IJobDetail jobDetail = QuartzOptions.CreateJobDetail(); if (jobDetail == null) { return(QuartzResult.Error($"创建jobDetail 失败")); } ITrigger trigger = null; if (QuartzOptions.IntervalType == IntervalType.Cron) { if (!CronExpression.IsValidExpression(QuartzOptions.Interval)) { return(QuartzResult.Error($"请确认表达式{QuartzOptions.Interval}是否正确!")); } trigger = QuartzOptions.CreateCronTrigger(); } else { trigger = QuartzOptions.CreateSimpleTrigger(); } _taskList.Add(QuartzOptions); await scheduler.ScheduleJob(jobDetail, trigger); if (QuartzOptions.TaskStatus == TriggerState.Normal) { await scheduler.Start(); } else { await schedulerFactory.Pause(QuartzOptions); } logger.LogDebug($"作业:{QuartzOptions.TaskName},目标:{QuartzOptions.TaskTarget},分组:{QuartzOptions.GroupName},状态为:{QuartzOptions.TaskStatus}"); } catch (Exception ex) { return(QuartzResult.Error(ex.Message)); } return(QuartzResult.Ok($"作业:{QuartzOptions.TaskName},分组:{QuartzOptions.GroupName} 添加成功")); }
/// <summary> /// 添加作业 /// </summary> /// <param name="taskOptions"></param> /// <param name="schedulerFactory"></param> /// <param name="init">是否初始化,false持久化,true不持久化</param> /// <returns></returns> public static async Task<object> AddJob(this TaskOptions taskOptions, ISchedulerFactory schedulerFactory, bool init = false) { try { (bool, string) validExpression = taskOptions.interval.IsValidExpression(); if (!validExpression.Item1) return new { status = false, msg = validExpression.Item2 }; (bool, object) result = taskOptions.Exists(init); if (!result.Item1) return result.Item2; if (!init) { TaskRepository.AddTask(taskOptions); } IJobDetail job = JobBuilder.Create<HttpResultful>() .WithIdentity(taskOptions.name, taskOptions.group_name) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(taskOptions.name, taskOptions.group_name) .StartNow().WithDescription(taskOptions.describe) .WithCronSchedule(taskOptions.interval) .Build(); IScheduler scheduler = await schedulerFactory.GetScheduler(); await scheduler.ScheduleJob(job, trigger); //如果任务处于正常状态 if (taskOptions.status == (int)TriggerState.Normal) { await scheduler.Start(); } else { //暂定任务 await schedulerFactory.Pause(taskOptions); } } catch (Exception ex) { return new { status = false, msg = ex.Message }; } return new { status = true }; }
public async Task <IActionResult> Pause(TaskOptions taskOptions) { return(Json(await _schedulerFactory.Pause(taskOptions))); }
public async Task <IActionResult> Pause([FromQuery] TaskOptions taskOptions) { return(Ok(await _schedulerFactory.Pause(taskOptions))); }
/// <summary> /// 添加作业 /// </summary> /// <param name="taskOptions"></param> /// <param name="schedulerFactory"></param> /// <param name="init">是否初始化,否=需要重新生成配置文件,是=不重新生成配置文件</param> /// <returns></returns> public static async Task <object> AddJob(this TaskOptions taskOptions, ISchedulerFactory schedulerFactory, bool init = false, IJobFactory jobFactory = null) { try { (bool, string)validExpression = taskOptions.Interval.IsValidExpression(); if (!validExpression.Item1) { return new { status = false, msg = validExpression.Item2 } } ; (bool, object)result = taskOptions.Exists(init); if (!result.Item1) { return(result.Item2); } if (!init) { _taskList.Add(taskOptions); FileQuartz.WriteJobConfig(_taskList); } IJobDetail job = JobBuilder.Create <HttpResultfulJob>() .WithIdentity(taskOptions.TaskName, taskOptions.GroupName) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(taskOptions.TaskName, taskOptions.GroupName) .StartNow() .WithDescription(taskOptions.Describe) .WithCronSchedule(taskOptions.Interval) .Build(); IScheduler scheduler = await schedulerFactory.GetScheduler(); if (jobFactory == null) { try { jobFactory = HttpContext.Current.RequestServices.GetService <IJobFactory>(); } catch (Exception ex) { Console.WriteLine($"创建任务[{taskOptions.TaskName}]异常,{ex.Message}"); } } if (jobFactory != null) { scheduler.JobFactory = jobFactory; } await scheduler.ScheduleJob(job, trigger); if (taskOptions.Status == (int)TriggerState.Normal) { await scheduler.Start(); } else { await schedulerFactory.Pause(taskOptions); FileQuartz.WriteStartLog($"作业:{taskOptions.TaskName},分组:{taskOptions.GroupName},新建时未启动原因,状态为:{taskOptions.Status}"); } if (!init) { FileQuartz.WriteJobAction(JobAction.新增, taskOptions.TaskName, taskOptions.GroupName); } } catch (Exception ex) { return(new { status = false, msg = ex.Message }); } return(new { status = true }); }