quartz的配置

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就按你的指令,定时为你服务了。
原文地址:https://www.cnblogs.com/hualiu0/p/4946836.html