应用程序
1、定义要执行的任务:实现Quartz.IJob接口
- 实现Quartz.IJob接口,实现方法Execute
public class TimeJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//向c:\Quartz.txt写入当前时间并换行
System.IO.File.AppendAllText(@"c:\Quartz.txt", DateTime.Now+Environment.NewLine);
}
}
2、创建一个调度器
//调度器
IScheduler scheduler;
//调度器工厂
ISchedulerFactory factory;
//创建一个调度器
factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler();
scheduler.Start();
3、创建一个任务对象
- 这个任务对象就是我们将要执行的工作,job1是名称,group1是组名
//2、创建一个任务
IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").Build();
4、创建一个触发器
//3、创建一个触发器
//DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?") //5秒执行一次
//.StartAt(runTime)
.Build();
5、将任务与触发器添加到调度器中并执行
//4、将任务与触发器添加到调度器中
scheduler.ScheduleJob(job, trigger);
//5、开始执行
scheduler.Start();
6、应用关闭时结束任务
- shutdown方法中的参数true的意思为:是否等待任务的完成再结束
// 在应用程序关闭时运行的代码
if (scheduler != null)
{
scheduler.Shutdown(true);
}
7、运行结果
框架说明
1、Quartz的cron表达式
//3、创建一个触发器
//DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?") //5秒执行一次
//.StartAt(runTime)
.Build();
/*
由7段构成:秒 分 时 日 月 星期 年(可选)
"-" :表示范围 MON-WED表示星期一到星期三
"," :表示列举 MON,WEB表示星期一和星期三
"*" :表是“每”,每月,每天,每周,每年等
"/" :表示增量:0/15(处于分钟段里面) 每15分钟,在0分以后开始,3/20 每20分钟,从3分钟以后开始
"?" :只能出现在日,星期段里面,表示不指定具体的值
"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
"W" :表示工作日,距离给定值最近的工作日
"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)
如果Minutes的数值是 '0/15' ,表示从0开始每15分钟执行
如果Minutes的数值是 '3/20' ,表示从3开始每20分钟执行,也就是‘3/23/43’
*/
官方示例:
表达式 |
解释 |
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应用程序池自动回收问题的有效解决办法