小记一下通过Quartz 进行轮询数据库从而进行自动打印的需求。

一:首先通过NuGet引用Quartz,Quartz依赖Common.Logging和Common.Logging.Log4Net1211,所以同时需要引用这两个DLL,Common.Logging.Log4Net1211最新版本名称是Common.Logging.Log4Net1213,引用即可。

二:创建Job,基础代码如下

通过Quartz 进行定时任务-LMLPHP通过Quartz 进行定时任务-LMLPHP
 1 /// <summary>
 2     /// 自动打印job
 3     /// </summary>
 4     [DisallowConcurrentExecution]
 5     public class AutoPrintJob : IJob
 6     {
 7         public async Task Execute(IJobExecutionContext context)
 8         {
 9             await Task.Run(() =>
10             {
11                //具体处理逻辑
12             });
13         }
14     }
View Code

三:创建Scheduler,基础代码如下

通过Quartz 进行定时任务-LMLPHP通过Quartz 进行定时任务-LMLPHP
 1  public class PrintJobScheduler
 2     {
 3         public static IScheduler scheduler;
 4         public static void Start()
 5         {
 6             try
 7             {
 8                 Logger.Log($"开始创建自动打印任务", Logger.Category.General, Logger.Severity.Information);
 9                 //创建调度单元
10                 Task<IScheduler> tsk = StdSchedulerFactory.GetDefaultScheduler();
11                 //不能注释,注释掉添加调度池的时候会报错
12                 scheduler = tsk.Result;
13                 //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
14                 IJobDetail job = JobBuilder.Create<AutoPrintJob>().WithIdentity("AutoPrintIdentity").Build();
15                 string isDebug = ConfigurationManager.AppSettings["IsDebug"].ToString();
16                 string cronExpression =  GetLoopInterval();
17                 //3.创建并配置一个触发器即trigger 
18                 ITrigger _CronTrigger = TriggerBuilder.Create()
19                   .WithIdentity("TriggerAutoPrint")
20                   .WithCronSchedule(cronExpression) //秒 分 时 某一天 月 周 年(可选参数) 
21                   .Build()
22                   as ITrigger;
23                 //4.将job和trigger加入到作业调度池中
24                 scheduler.ScheduleJob(job, _CronTrigger);
25                 //5.开启调度
26                 scheduler.Start();
27                 Logger.Log($"创建自动打印任务成功", Logger.Category.General, Logger.Severity.Information);
28             }
29             catch (Exception ex)
30             {
31                 Logger.Log($"创建自动打印任务失败,错误信息:"+ex, Logger.Category.ErrorLog, Logger.Severity.Error);
32             }
33         }
34         public static string GetLoopInterval()
35         {
36             //获取配置文件任务循环间隔
37             int intervalConfig = 1;
38             if (ConfigurationManager.AppSettings["AutoPrintIntervalTime"]!=null)
39             {
40                 intervalConfig = Convert.ToInt32(ConfigurationManager.AppSettings["AutoPrintIntervalTime"]);
41             }
42             return intervalConfig.ToString();
43         }
44     }    
View Code

四:在Global.axax调用Scheduler:

通过Quartz 进行定时任务-LMLPHP

09-05 17:08