Quartz.Net中的概念:计划者(IScheduler)、工作(IJob)、触发器(Trigger)。给计划者一个工作,让他在Trigger(什么条件下做这件事)触发的条件下执行这个工作
将要定时执行的任务的代码写到实现IJob接口的Execute方法中即可,时间到来的时候Execute方法会被调用。
CrondTrigger是通过Crond表达式设置的触发器,还有 SimpleTrigger等简单的触发器。可以通过TriggerUtils的MakeDailyTrigger、MakeHourlyTrigger等方法简化调用。调用代码参考备注。
初始化定时和结束定时的代码放到哪里(Application_Start,Application_End)
1.先在bin文件夹中引用Quartz.Net的dll 文件
Common.Logging.dll,Quartz.dll
2.Global文件中的Application_Start。
[csharp] view plaincopy
//从配置中读取任务启动时间
int indexStartHour = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartHour"]);
int indexStartMin = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartMin"]);
ISchedulerFactory sf = new StdSchedulerFactory();//执行者
sched = sf.GetScheduler();
JobDetail job = new JobDetail("job1", "group1", typeof(TestJob));//TestJob为实现了IJob接口的类,(工作名称,分组,那个类)
Trigger trigger = TriggerUtils.MakeDailyTrigger("tigger1", indexStartHour, indexStartMin);//每天10点00分执行
trigger.JobName = "job1";
trigger.JobGroup = "group1";
trigger.Group = "group1";
sched.AddJob(job, true);
sched.ScheduleJob(trigger);
sched.Start();
3.Application_End时
sched.Shutdown(true);//结束时关掉
4.具体要执行的代码在TestJob中的 public void Execute(JobExecutionContext context)方法中
下面我们用几行代码搞定它。
1. 定义要执行的任务(实现Quartz.IJob接口),代码如下:
public class ShiftNotify : IJob
{
public void Execute(JobExecutionContext context)
{
//在此执行计划任务
//比如:“时间不早了,该起床啦!”
}
}
2. 将要计划执行的任务加入到调度器中。
完成这一步,需要三样东西:调度器(IScheduler)、任务(JobDetail)、触发器(Trigger)。
由于是在Web应用程序中进行调度,代码需要写在Global.asax.cs的Application_Start()方法中。
a) 创建一个调度器(职责:如果触发器设定的条件满足,就让预先定义好的任务干活):
ISchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = factory.GetScheduler();
scheduler.Start();
b) 创建一个任务(第1步已经定义好的任务,真正干活的):
JobDetail job = new JobDetail("MyJob", typeof(ShiftNotify));
c) 创建一个触发器(从什么时间开始,多长时间触发一次):
Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1);
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
trigger.Name = "ShiftNotify";
第一行代码设置的是1分钟触发一次。
第二行代码设置的是开始时间。之前遇到的问题就出现在这里。将DateTime.UtcNow写成了DateTime.Now,怎么也触发不了。
d) 将任务与触发器添加到调度器中:
scheduler.ScheduleJob(job, trigger);
好了,完工!
不需要任何配置文件,Quartz.NET就按你的指令,定时为你服务了。