使用Quartz.Net框架实现定时任务

    最近几天的学习中,感觉收获颇多,学习的知识也挺实用的,在这我将介绍其中一个小技术。在项目中,要求每天能定时索引当天最新的帖子,但是,我们不可能派一个人每天点击“开始索引”按钮,而应该是计算机定时自动去触发索引的动作。有哪些方法可以用来实现这种定时任务了?

    大家最容易想到的应该是用Timer定时器来实现,还有像Windows系统的定时任务……在这,我将采用Quartz.Net框架来实现。

    Quartz.Net是一个定时任务框架,可以实现灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔1小时执行”、“每天22点执行”、“每月18日的下午执行8次”等各种定时任务。下面我们来看看如何实现这一功能。

    在开始之前,我们必须先做好准备工作。首先为项目添加两个引用,分别是Quartz.dll和Common.Logging.dll。

    好了,准备工作已经做好了,我们正式切入主题。

    我们先来创建一个创建索引任务类:IndexJob.cs,该类实现IJob接口。

public class IndexJob:IJob
{
public void Execute(JobExecutionContext context)
{
//在此处放置需要定时执行的代码
}
}

任务类创建好了,接下来我们来看看如何来执行这个任务。

在程序启动的时候启动这个定时任务,那么我们应该将这个启动定时任务的代码放在程序中的哪个位置呢?

第一个用户访问我们的WebApplication的时候,Application_Start才运行。因此,我们应该将启动定时任务的代码放在Global.asax文件的Application_Start方法内;

代码
void Application_Start(object sender, EventArgs e)
{
//定时任务
IScheduler sched;
ISchedulerFactory Ifactory
= new StdSchedulerFactory();
sched
= Ifactory.GetScheduler();
JobDetail jobDetails
= new JobDetail("IndexJob", "group1", typeof(IndexJob));
DateTime dt
= TriggerUtils.GetNextGivenSecondDate(null,5); //任务第一次执行在分配任务后5秒
TimeSpan interval = TimeSpan.FromHours(2); //执行任务的时间间隔,此处为两小时
//SimpleTrigger.RepeatIndefinitely表示该任务将每隔5小时无限制的执行
Trigger trigger = new SimpleTrigger("IndexTrigger", "group1", "IndexJob", "group1", dt, null,
SimpleTrigger.RepeatIndefinitely, interval);
sched.AddJob(jobDetails,
true);
sched.ScheduleJob(trigger);
sched.Start();
//只有start后任务才被启动




}

定时启动任务到此就完成了。

要关闭任务定时则需要sched.Shutdown(true)。

 

 

 

posted @ 2010-10-07 15:16  泪的诺言lni  阅读(1058)  评论(0编辑  收藏  举报