using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using ProjectBase.Data.BaseDAL; using ProjectBase.Data.Logs; using Quartz; using Quartz.Impl; using SIMDP.Model; namespace SIMDP.BLL { public class Scheduler { #region 原始代码 //private static string timeSpanClear = "0 0 11 1 * ?"; //每月1号11点执行 //private static string timeSpanUpload = "0 */5 * * * ?"; // 每隔5分钟执行一次: //private static IScheduler scheduler; //private static IScheduler scheduler2; //private static IScheduler schedulerTest; ///// ///// 开启定时任务 ///// //public static async Task Schedule() //{ // try // { // // 1.创建scheduler的引用 // StdSchedulerFactory factory = new StdSchedulerFactory(); // scheduler = await factory.GetScheduler(); // scheduler2 = await factory.GetScheduler(); // schedulerTest = await factory.GetScheduler(); // //2.启动 scheduler // await scheduler.Start(); // await scheduler2.Start(); // await schedulerTest.Start(); // // 3.创建 job // IJobDetail job = JobBuilder.Create() // //.WithIdentity("clearJob", "group1") // //.WithDescription("This is clearJob") // .UsingJobData("YEARS", "3") // .Build(); // IJobDetail job2 = JobBuilder.Create() // //.WithIdentity("uploadJob", "group1") // //.WithDescription("This is uploadJob") // .Build(); // IJobDetail jobTest = JobBuilder.Create() // .WithIdentity("TestJob", "group1") // .WithDescription("This is TestJob") // .UsingJobData("YEARS", "3") // .Build(); // // 4.创建 trigger (创建 trigger 触发器) // ITrigger trigger = TriggerBuilder.Create() // //.WithIdentity("clearTrigger", "group1") //触发器 组 // .StartNow() // //.WithCronSchedule("* * * * * ?") // .WithCronSchedule(timeSpanClear) // //.WithDescription("This is clearJob's clearTrigger") // .Build(); // ITrigger trigger2 = TriggerBuilder.Create() // //.WithIdentity("uploadTrigger", "group1") //触发器 组 // .StartNow() // //.WithCronSchedule("0 */1 * * * ?") // .WithCronSchedule(timeSpanUpload) // //.WithDescription("This is uploadJob's uploadTrigger") // .Build(); // ITrigger triggerTest = TriggerBuilder.Create() // .WithIdentity("TestTrigger", "group1") //触发器 组 // .StartNow() // .WithCronSchedule("* * * * * ?") // .WithDescription("This is TestJob's TestTrigger") // .Build(); // // 5.使用trigger规划执行任务job (使用触发器规划执行任务) // await scheduler.ScheduleJob(job, trigger); // await scheduler2.ScheduleJob(job2, trigger2); // await schedulerTest.ScheduleJob(jobTest, triggerTest); // } // catch (Exception ex) // { // LogHelper.log.Error(string.Format("开启定时任务出现错误:{0}", ex.ToString())); // } //} ///// ///// 关闭定时任务 ///// ///// //public async static Task Stop() //{ // try // { // await scheduler.Shutdown(); // await scheduler2.Shutdown(); // await schedulerTest.Shutdown(); // } // catch (Exception ex) // { // LogHelper.log.Error(string.Format("关闭定时任务出现错误:{0}", ex.ToString())); // } //} #endregion private static List jobList = new List(); private static List schedulerList = new List(); public Scheduler() { } /// /// 开启定时任务 /// public static async Task Schedule() { try { // 1.创建scheduler的引用 StdSchedulerFactory factory = new StdSchedulerFactory(); jobList = BLLFactory.Instance.Find("job_valid = 1"); if (jobList.Count <= 0) { return; } foreach (var jobItem in jobList) { schedulerList.Add(await factory.GetScheduler()); } //2.启动 scheduler foreach (var item in schedulerList) { await item.Start(); } for (int i = 0; i < schedulerList.Count; i++) { Type type = Type.GetType(jobList[i].JobName); string paraKey = ""; string paraValue = ""; JObject jObject = JObject.Parse(jobList[i].JobPara); JToken token = jObject["Key"]; if (token != null) paraKey = token.ToString(); token = jObject["Value"]; if (token != null) paraValue = token.ToString(); // 3.创建 job IJobDetail jobDetail; if (string.IsNullOrEmpty(paraKey) || string.IsNullOrEmpty(paraValue)) { jobDetail = JobBuilder.Create(type) //.WithIdentity("TestJob", "group1") //.WithDescription("This is TestJob") .Build(); } else { jobDetail = JobBuilder.Create(type) //.WithIdentity("TestJob", "group1") //.WithDescription("This is TestJob") .UsingJobData(paraKey, paraValue) .Build(); } // 4.创建 trigger (创建 trigger 触发器) ITrigger trigger = TriggerBuilder.Create() //.WithIdentity("TestTrigger", "group1") //触发器 组 .StartNow() .WithCronSchedule(jobList[i].JobTime) //.WithDescription("This is TestJob's TestTrigger") .Build(); // 5.使用trigger规划执行任务job (使用触发器规划执行任务) await schedulerList[i].ScheduleJob(jobDetail, trigger); } } catch (Exception ex) { LogHelper.log.Error(string.Format("开启定时任务出现错误:{0}", ex.ToString())); } } /// /// 关闭定时任务 /// /// public async static Task Stop() { try { if (schedulerList.Count <= 0) { return; } foreach (var item in schedulerList) { await item.Shutdown(); } } catch (Exception ex) { LogHelper.log.Error(string.Format("关闭定时任务出现错误:{0}", ex.ToString())); } } } }