调度器:
Quartz.Net中核心的地方就调度器,调度器负责管理Quartz.NET应用运行时环境。
上一节中代码中IScheduler sched = sf.GetScheduler(); 这一句代码看起来简单,其实背后做了好多事情,比如:初始化配置,是使用数据库还是内存,初始化线程池,是否是远程执行job等等,总之挺复杂的。
作业:
目前我的理解就是job,类似于上一节中自定义的MyJob
触发器:
用来告诉调度器作业什么时候触发.
解发器分为:SimpleTriggerImpl,CronTriggerImpl,DailyTimeIntervalTriggerImpl
具体的代码表现就是继承ITrigger这个接口。
如果只是简单的调度作业,比如每隔一小时执行一次哪么简单调度器(SimpleTriggerImpl)完全适合你,
如果您想指定工作日的每天的早上9点执行一个任务,复杂排程调度器(CronTriggerImpl)更为合适大家
复杂排程调度器采用Calendar-like表达式,
具体见:点我打表达式
例子
比如用复杂排程调度器写一个每天每天下午的 6点到6点59分每隔5s就触发一次的例子
1.雷同上一节的job:
- public class MyJob : IJob
- {
- publicvoid Execute(IJobExecutionContextcontext)
- {
- Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
- }
- }
2.雷同上一节的main函数:
- static void Main(string[] args)
- {
- //调度器
- ISchedulerFactorysf = new StdSchedulerFactory();
- ISchedulersched = sf.GetScheduler();
- //job详情,注意MyJob
- IJobDetailmyJob = JobBuilder.Create<MyJob>()
- .WithIdentity("job1", "group1")
- .Build();
- //触发器
- ITriggertrigger = TriggerBuilder.Create()
- .WithIdentity("trigger1", "group1")
- .WithCronSchedule("0/5 * 18 * * ? ")//这里用的复杂排程调度器
- .Build();
- //关联job和触发器
- sched.ScheduleJob(myJob, trigger);
- //执行
- sched.Start();
- Console.Read();
- //关掉
- sched.Shutdown(true);
- }
3.不一样上一节的运行结果:
结语:下载下来Quartz.Net的例子,发现Quartz实在是太实用了,有简单的任务,有状态job,可以执行远程的job,而且配置也很强大,忍不住想往下学……
代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Quartz.Impl;
- namespace Quartz.Demo
- {
- class MyClass
- {
- static void Main(string[] args)
- {
- //调度器
- ISchedulerFactory sf = new StdSchedulerFactory();
- IScheduler sched = sf.GetScheduler();
- //job详情,注意MyJob
- IJobDetail myJob = JobBuilder.Create<MyJob>()
- .WithIdentity("job1", "group1")
- .Build();
- //触发器
- ITrigger trigger = TriggerBuilder.Create()
- .WithIdentity("trigger1", "group1")
- .WithCronSchedule("0/5 * 18 * * ? ")
- .Build();
- //关联job和触发器
- sched.ScheduleJob(myJob, trigger);
- //执行
- sched.Start();
- Console.Read();
- //关掉
- sched.Shutdown(true);
- }
- public class MyJob : IJob
- {
- public void Execute(IJobExecutionContext context)
- {
- Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
- }
- }
- }
- }