应用程序

1、定义要执行的任务:实现Quartz.IJob接口

  • 实现Quartz.IJob接口,实现方法Execute
  1. public class TimeJob : IJob
  2. {
  3. public void Execute(IJobExecutionContext context)
  4. {
  5. //向c:\Quartz.txt写入当前时间并换行
  6. System.IO.File.AppendAllText(@"c:\Quartz.txt", DateTime.Now+Environment.NewLine);
  7. }
  8. }

2、创建一个调度器

  • 调度器负责管理与控制任务的执行
  1. //调度器
  2. IScheduler scheduler;
  3. //调度器工厂
  4. ISchedulerFactory factory;
  5. //创建一个调度器
  6. factory = new StdSchedulerFactory();
  7. scheduler = factory.GetScheduler();
  8. scheduler.Start();

3、创建一个任务对象

  • 这个任务对象就是我们将要执行的工作,job1是名称,group1是组名
  1. //2、创建一个任务
  2. IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").Build();

4、创建一个触发器

  • 触发器定义了什么时间任务开始或每隔多久执行一次
  1. //3、创建一个触发器
  2. //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
  3. ITrigger trigger = TriggerBuilder.Create()
  4. .WithIdentity("trigger1", "group1")
  5. .WithCronSchedule("0/5 * * * * ?") //5秒执行一次
  6. //.StartAt(runTime)
  7. .Build();

5、将任务与触发器添加到调度器中并执行

  1. //4、将任务与触发器添加到调度器中
  2. scheduler.ScheduleJob(job, trigger);
  3. //5、开始执行
  4. scheduler.Start();

6、应用关闭时结束任务

  • shutdown方法中的参数true的意思为:是否等待任务的完成再结束
  1. // 在应用程序关闭时运行的代码
  2. if (scheduler != null)
  3. {
  4. scheduler.Shutdown(true);
  5. }

7、运行结果

框架说明

1、Quartz的cron表达式

  • cron表达式就是用于设定时间的一个字符串
  1. //3、创建一个触发器
  2. //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
  3. ITrigger trigger = TriggerBuilder.Create()
  4. .WithIdentity("trigger1", "group1")
  5. .WithCronSchedule("0/5 * * * * ?") //5秒执行一次
  6. //.StartAt(runTime)
  7. .Build();
  1. /*
  2. 由7段构成:秒 分 时 日 月 星期 年(可选)
  3. "-" :表示范围 MON-WED表示星期一到星期三
  4. "," :表示列举 MON,WEB表示星期一和星期三
  5. "*" :表是“每”,每月,每天,每周,每年等
  6. "/" :表示增量:0/15(处于分钟段里面) 每15分钟,在0分以后开始,3/20 每20分钟,从3分钟以后开始
  7. "?" :只能出现在日,星期段里面,表示不指定具体的值
  8. "L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
  9. "W" :表示工作日,距离给定值最近的工作日
  10. "#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)
  11. 如果Minutes的数值是 '0/15' ,表示从0开始每15分钟执行
  12. 如果Minutes的数值是 '3/20' ,表示从3开始每20分钟执行,也就是‘3/23/43’
  13. */

官方示例:

表达式 解释
0 0 12 ? 每天中午12点触发
0 15 10 ? 每天上午10:15触发
0 15 10 ? 每天上午10:15触发
0 15 10 ? * 每天上午10:15触发
0 15 10 ? 2005 2005年的每天上午10:15触发
0 14 * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 ? 在每天下午2点到下午2:05期间的每1分钟触发
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 15 10 15 * ? 每月15日上午10:15触发
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 L-2 * ? 每个月的第二天到最后一天的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 每个月最后一个星期五上午10时15分触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
0 0 12 1/5 * ? 每月每隔5天下午12点(中午)触发, 从每月的第一天开始
0 11 11 11 11 ? 每11月11日上午11时11分触发

2、其它帮助

3、IIS应用程序池自动回收问题的有效解决办法