1.首先必须清楚一些概念:调度器,作业,定时触发器,如下
2.关于一个Quartz定时调用的项目的设计和实现
把需要的东西抽象出来,比如把作业的一些属性,如作业的名称等,如下
1 public int id { get; set; } 2 /// 任务名称 3 public string jobname { get; set; } 4 5 /// job配置的时间 6 public string jobcron { get; set; } 7 8 /// job的分组的名称 9 public string jobgroup { get; set; } 10 11 /// 作业当前的状态,0.加入调度队列 1.未加入调度队列 2.暂停 12 public int jobtype { get; set; } 13 14 public string jobtypename { get; set; } 15 16 public string jobdescription { get; set; } 17 18 /// 作业的开始时间 19 public DateTime createtime { get; set; } 20 21 /// 0删除,1使用 22 public int type { get; set; } 23 24 public string jobtrigger { get; set; } 25 26 public string jobtriggergroup { get; set; } 27 28 ///作业的下次执行时间 29 30 public DateTime nexttime { get; set; } 31 32 /// 作业的上次执行时间 33 34 public DateTime pretime { get; set; }
3.项目整体设计
4.因为是c#代码,所以采用的是自托管的方式
可以参考下面
https://www.itsvse.com/thread-3454-1-1.html
5.把Quartz里面的调度器,定时器,作业写一个通用类
public static class JobManager { public static void CreateScheduler() { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); sched = schedulerFactory.GetScheduler(); sched.Start(); } ///这边的type类型是通过反射方式加载进来的job作业类型如2里面的对象 public static DateTimeOffset AddJob(Type jobType, string crons) { //创建作业的信息类 IJobDetail jobCheck = JobBuilder.Create(jobType). WithIdentity(jobType.Name, jobDataGroup). UsingJobData(jobDataGroup, jobType.FullName) .Build(); //创建时间篇 ICronTrigger CronTrigger = new CronTriggerImpl(jobType.Name + jobtrigger, TriggerGroup, crons);//, crons return sched.ScheduleJob(jobCheck, CronTrigger); } }
6.总结,学习一个新东西先了解整体的框架和设计,再花时间去了解,其实源代码里面的demo是最好的