/// <summary> /// 处理Job /// </summary> /// <param name="operate"></param> /// <param name="assemblyName"></param> /// <param name="model"></param> public void HandleJobAsync(string operate, string assemblyName, QuartzEditModel model) { try { InitSchedulerAsync(); if (!scheduler.IsStarted) { throw new Exception("请先启动定时任务程序"); } JobKey jobKey = new JobKey(model.JobName, model.JobGroup); TriggerKey triggerKey = new TriggerKey(model.JobName, model.JobGroup); Assembly assembly = Assembly.LoadFrom(Constants.ServerMapPath() + assemblyName); if (assembly == null) { throw new Exception(string.Format("加载Assembly[{0}]失败!", assemblyName)); } Type type = assembly.GetType(model.JobClass); switch (operate) { case Constants.JobPause: scheduler.PauseJob(jobKey); break; case Constants.JobResume: scheduler.ResumeJob(jobKey); break; case Constants.JobStop: scheduler.UnscheduleJob(triggerKey); break; case Constants.JobStart: CreateJob(assemblyName, model); break; case Constants.JobExcute: IJobDetail jobDetail1 = JobBuilder.Create(type).WithIdentity(model.JobName + "$$" + Guid.NewGuid().ToString(), model.JobGroup + "$$" + Guid.NewGuid().ToString()).Build(); ITrigger trigger1 = TriggerBuilder.Create() .StartNow().Build(); scheduler.ScheduleJob(jobDetail1, trigger1); break; default: throw new Exception("operate is not invalid!"); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 创建或更新Job /// </summary> /// <param name="assemblyName"></param> /// <param name="model"></param> public void CreateJob(string assemblyName, QuartzEditModel model) { try { InitSchedulerAsync(); if (!scheduler.IsStarted) { throw new Exception("请先启动定时任务程序"); } if (!CronExpression.IsValidExpression(model.Cron)) { throw new Exception(string.Format("Cron表达式[{0}]格式不正确!", model.Cron)); } Assembly assembly = Assembly.LoadFrom(Constants.ServerMapPath() + assemblyName); if (assembly == null) { throw new Exception(string.Format("加载Assembly[{0}]失败!", assemblyName)); } Type type = assembly.GetType(model.JobClass); if (type == null) { throw new Exception(string.Format("加载Class[{0}]失败!", model.JobClass)); } if (!type.IsSubclassOf(typeof(BaseJob))) { throw new Exception(string.Format("Class[{0}]未继承BaseJob!", model.JobClass)); } JobKey jobKey = new JobKey(model.JobName, model.JobGroup); IJobDetail jobDetail = JobBuilder.Create(type) .WithIdentity(jobKey) .WithDescription(model.JobDesc) .Build(); scheduler.AddJob(jobDetail, false); TriggerKey triggerKey = new TriggerKey(model.JobName, model.JobGroup); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(triggerKey) .WithCronSchedule(model.Cron) .WithDescription(model.CronDesc) .Build(); scheduler.ScheduleJob(jobDetail, trigger); } catch (Exception ex) { throw ex; } }