工作中我们经常碰到定时或者固定时间点去做一些事情,然后每天到时间点就会去做这样的事情,如果理解这样的场景,我们就要引入今天我们的主角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 }
View Code

相关文章: