一 前提
注意:这个定时器只有在项目运行时有用,但是服务可以在不运行项目的时候依然进行计时。
(1)首先需要引用Common.Logging.dll和Quartz.dll。
(2)其次,我们需要了解一些基本的知识
Job
表示一个具体要执行的工作,需要实现IJob接口.
JobDetail
JobDetail表示一个具体的可执行的调度程序,它指向Job.
Trigger
代表工作的触发,什么时候执行,执行多少次
Scheduler
代表一个执行计划,一个执行计划中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
注意:上面是转自https://blog.csdn.net/tgjmail/article/details/77773892。
二 实例
(1)下面是根据实际项目做的一个小例子。
首先,我在这里先创建一个执行具体事务的类,它需要继承IJob,并实现唯一的Execute。
public class SalaryJob:IJob
{
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public void Execute(IJobExecutionContext context)
{
string args = "";
Idictomes dc = new dictomes();
dc.Insert(args);//调用一个接口
}
}
其次,我们需要创建scheduler与Trigger。
public class SalaryScheduler
{
public static void Start()
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
// string expression = "0 */1 * * * ?";//每5秒执行一次
string expression = "0 57 23 L * ?";//每月最后一天的23点57分执行。
IJobDetail job = JobBuilder.Create<SalaryJob>().Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("triggerName", "groupName")
.WithCronSchedule(expression)
.Build();
scheduler.ScheduleJob(job, trigger);
}
}
注意上面的salaryjob类是具体执行的实现类。
然后,在Global.asax文件中的Application_Start中调用start()方法,因为Application_Start在程序初始化的时候执行。在Web应用程序的生命周期里就执行一次,这里只能放一些公用的信息,比如HttpApplicationState。
这样,在运行之后就会按照设定的定时器来执行了。