工作中我们经常碰到定时或者固定时间点去做一些事情,然后每天到时间点就会去做这样的事情,如果理解这样的场景,我们就要引入今天我们的主角Quartz,其实这个跟数据库的作业类似,但是不仅仅局限于数据库。
一: quartZ引入&三大核心对象简介
1:在项目中打开Nuget管理,然后搜索QuartZ,现在最新的版本是3.0.7,需要在Framework4.5.2上面使用。
2:quartZ的三大核心对象
A:IScheduler:单元/实例,在这里去完成定时任务的配置,只有单元启动,里面的作业才能正常运行
B:IJob:任务,定时执行动作就是Job
C:ITrigger:定时策略(设置执行的频率或者执行方式)
二:三大核心对象的初始化以及使用如下:
1 #region scheduler 2 Console.WriteLine("初始化scheduler......"); 3 StdSchedulerFactory factory = new StdSchedulerFactory(); 4 IScheduler scheduler = await factory.GetScheduler(); 5 //scheduler.ListenerManager.AddSchedulerListener(new CustomSchedulerListener()); 6 //scheduler.ListenerManager.AddTriggerListener(new CustomTriggerListener()); 7 //scheduler.ListenerManager.AddJobListener(new CustomJobListener()); 8 await scheduler.Start(); 9 #endregion 10 11 //IJob ITrigger 12 { 13 //创建作业 14 IJobDetail jobDetail = JobBuilder.Create<TestJob>() 15 .WithIdentity("testjob", "group1") 16 .WithDescription("This is TestJob") 17 .Build(); 18 19 //IJobDetail jobDetail = JobBuilder.Create<TestStatefulJob>() 20 // .WithIdentity("testjob", "group1") 21 // .WithDescription("This is TestJob") 22 // .Build(); 23 24 jobDetail.JobDataMap.Add("student1", "Milor"); 25 jobDetail.JobDataMap.Add("student2", "心如迷醉"); 26 jobDetail.JobDataMap.Add("student3", "宇洋"); 27 jobDetail.JobDataMap.Add("Year", DateTime.Now.Year); 28 29 //ITrigger trigger = TriggerBuilder.Create() 30 // .WithIdentity("trigger1", "group1") 31 // .StartNow() 32 // .WithSimpleSchedule(x => x 33 // .WithIntervalInSeconds(10) 34 // .WithRepeatCount(10) 35 // .RepeatForever()) 36 // .WithDescription("This is testjob's Trigger") 37 // .Build(); 38 39 //创建时间策略 40 ITrigger trigger = TriggerBuilder.Create() 41 .WithIdentity("testtrigger1", "group1") 42 .StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10))) 43 //.StartNow()//StartAt 44 .WithCronSchedule("5/10 * * * * ?")//每隔一分钟 45 //"10,20,30,40,50,0 * * * * ?" 46 .WithDescription("This is testjob's Trigger") 47 .Build(); 48 49 trigger.JobDataMap.Add("student4", "Ray"); 50 trigger.JobDataMap.Add("student5", "心欲无痕"); 51 trigger.JobDataMap.Add("student6", "风在飘动"); 52 trigger.JobDataMap.Add("Year", DateTime.Now.Year + 1); 53 54 await scheduler.ScheduleJob(jobDetail, trigger); 55 Console.WriteLine("scheduler作业添加完成......"); 56 }