コード例 #1
0
        /// <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 });
        }
コード例 #2
0
        /// <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}"));
            }
        }
コード例 #3
0
        /// <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} 添加成功"));
        }
コード例 #4
0
        /// <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 };
        }
コード例 #5
0
 public async Task <IActionResult> Pause(TaskOptions taskOptions)
 {
     return(Json(await _schedulerFactory.Pause(taskOptions)));
 }
コード例 #6
0
 public async Task <IActionResult> Pause([FromQuery] TaskOptions taskOptions)
 {
     return(Ok(await _schedulerFactory.Pause(taskOptions)));
 }
コード例 #7
0
        /// <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 });
        }