Пример #1
0
        private ITrigger CreateTrigger(Customer_JobInfo jobInfo)
        {
            TriggerBuilder tiggerBuilder = TriggerBuilder.Create().WithIdentity(jobInfo.JobName, jobInfo.JobGroupName);

            //错过的不管了,剩下的按正常执行。
            //tiggerBuilder.WithCronSchedule(jobInfo.Cron, c => c.WithMisfireHandlingInstructionDoNothing());

            ////错过的合并为一次执行,后续正常执行。
            tiggerBuilder.WithCronSchedule(jobInfo.Cron, c => c.WithMisfireHandlingInstructionFireAndProceed());

            ////错过的马上执行掉,后续正常执行
            //tiggerBuilder.WithCronSchedule(jobInfo.Cron, c => c.WithMisfireHandlingInstructionIgnoreMisfires());


            //if (jobInfo.StartTime > DateTime.Now)
            //{
            //    tiggerBuilder.StartAt(jobInfo.StartTime);
            //}
            //else
            //{
            //    tiggerBuilder.StartNow();
            //}

            ITrigger trigger = tiggerBuilder.Build();

            return(trigger);
        }
Пример #2
0
        /// <summary>
        /// 重启任务
        /// </summary>
        /// <param name="jobInfo"></param>
        /// <returns></returns>
        public bool ResumeJob(Customer_JobInfo jobInfo)
        {
            var jobKey     = MangertKey.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            var triggerKey = MangertKey.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);

            Scheduler.ResumeJob(jobKey).Wait();
            return(true);
        }
Пример #3
0
        /// <summary>
        /// 修改任务周期
        /// </summary>
        /// <param name="jobInfo"></param>
        /// <returns></returns>
        public bool ModifyJobCron(Customer_JobInfo jobInfo)
        {
            var scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
            var triggerKey      = MangertKey.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            var trigger         = TriggerBuilder.Create().StartAt(DateTimeOffset.Now.AddYears(-1)).WithIdentity(triggerKey).WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing()).Build();

            Scheduler.RescheduleJob(triggerKey, trigger);
            return(true);
        }
Пример #4
0
        public bool DeleteJob(Customer_JobInfo jobInfo)
        {
            var jobKey     = MangertKey.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            var triggerKey = MangertKey.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);

            Scheduler.PauseTrigger(triggerKey);
            Scheduler.UnscheduleJob(triggerKey);
            Scheduler.DeleteJob(jobKey);
            return(true);
        }
        public ActionResult AddJob(Customer_JobInfo obj)
        {
            if (!_quartzmanger.ValidExpression(obj.Cron))
            {
                var result = new ExecutionResult()
                {
                    IsSuccess = false, Message = "Cron表达式不正确"
                };
                return(Json(result));
            }

            if (obj.JobId > 0)
            {
                //修改
                var jobId = _quartzrepository.UpdateCustomerJobInfo(obj);

                if (jobId)
                {
                    var result = new ExecutionResult()
                    {
                        IsSuccess = true, Message = "成功"
                    };
                    return(Json(result));
                }
                else
                {
                    var result = new ExecutionResult()
                    {
                        IsSuccess = false, Message = "失败"
                    };
                    return(Json(result));
                }
            }
            else
            {
                var jobId = _quartzrepository.Insert(obj);

                if (jobId)
                {
                    var result = new ExecutionResult()
                    {
                        IsSuccess = true, Message = "成功"
                    };
                    return(Json(result));
                }
                else
                {
                    var result = new ExecutionResult()
                    {
                        IsSuccess = false, Message = "失败"
                    };
                    return(Json(result));
                }
            }
        }
Пример #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool UpdateCustomerJobInfo(Customer_JobInfo entity)
        {
            var t8 = Db.Updateable <Customer_JobInfo>().SetColumns(it => new Customer_JobInfo()
            {
                Cron        = entity.Cron,
                Description = entity.Description,
                DLLName     = entity.DLLName,
                CronExpressionDescription = entity.CronExpressionDescription,
                FullJobName      = entity.FullJobName,
                JobArgs          = entity.JobArgs,
                JobName          = entity.JobName,
                UpdateTime       = DateTime.Now,
                Updator          = "admin",
                TriggerName      = entity.TriggerName,
                TriggerGroupName = entity.TriggerGroupName,
                RequestUrl       = entity.RequestUrl,
                JobGroupName     = entity.JobGroupName
            }).Where(it => it.JobId == entity.JobId).ExecuteCommand();

            return(t8 > 0);
        }
Пример #7
0
 /// <summary>
 /// 查询job详情
 /// </summary>
 /// <param name="Id"></param>
 /// <returns></returns>
 public Customer_JobInfo FindById(int JobId)
 {
     return(Customer_JobInfo.GetById(JobId));
 }
Пример #8
0
 /// <summary>
 /// 新增job
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public bool Insert(Customer_JobInfo model)
 {
     return(Customer_JobInfo.Insert(model));
 }
Пример #9
0
        /// <summary>
        /// 运行job
        /// </summary>
        /// <param name="jobInfo"></param>
        /// <returns></returns>
        public async Task <bool> RunJob(Customer_JobInfo jobInfo)
        {
            var jobKey     = MangertKey.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            var triggerKey = MangertKey.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            var flag       = Scheduler.CheckExists(jobKey).Result;

            if (flag)
            {
                //////存在job,先删除
                await Scheduler.PauseTrigger(triggerKey);

                await Scheduler.UnscheduleJob(triggerKey);

                await Scheduler.DeleteJob(jobKey);

                Console.WriteLine("当前job已经存在,无需调度:{0}", jobKey.ToString());
            }

            if (!string.IsNullOrWhiteSpace(jobInfo.DLLName))
            {
                var jobdata = new JobDataMap()
                {
                    new KeyValuePair <string, object>(MangertKey.JobDataMapKeyJobId, jobInfo.JobId),
                    new KeyValuePair <string, object>("JobArgs", jobInfo.JobArgs),
                    new KeyValuePair <string, object>("RequestUrl", jobInfo.RequestUrl)
                };

                var        type      = GetClassInfo(jobInfo.DLLName, jobInfo.FullJobName);
                IJobDetail jobDetail = JobBuilder.Create(type)
                                       .WithIdentity(jobKey)
                                       .UsingJobData(jobdata)
                                       .RequestRecovery(false)
                                       .StoreDurably()
                                       .WithDescription("使用quartz进行持久化存储")
                                       .Build();

                ////两种不同的写法结果不同
                //IJobDetail jobDetail = JobBuilder.Create<TestJob2>()
                //    .WithIdentity(jobKey)
                //    .UsingJobData(jobdata)
                //    .RequestRecovery(false)
                //    //.StoreDurably()
                //    .WithDescription("使用quartz进行持久化存储")
                //    .Build();

                CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
                ITrigger            trigger             = TriggerBuilder.Create()
                                                          //.StartAt(DateTimeOffset.Now.AddYears(-1))
                                                          .StartNow()
                                                          .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                                          .ForJob(jobKey)
                                                          //.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())
                                                          //.WithSchedule(cronScheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                                          .WithCronSchedule(jobInfo.Cron)
                                                          .Build();



                if (!Scheduler.IsStarted)
                {
                    await Scheduler.Start();
                }

                await Scheduler.ScheduleJob(jobDetail, trigger);
            }
            return(true);
        }