今天就开始介绍怎么使用Quartz.NET来创建基于时间的定时服务,Quartz.NET我们不仅可以用在服务里、控制台、web、窗体、wpf等都是可以的。在本项目中就放在服务里。
第一步:我们在vs的NuGet里获取Quartz.NET,这里采用的是2.62版本,目前是最高版本是3.0.5。之所以不用最高版本,是因为自2.6.2版本以后,使用方式就改变了,我们暂时使用2.6.2
2.这里有一个坑,有些时候,版本信息默认是在下面的,如图左,我们这时候,把Quartz放在第一个,如右图
3.建立一个IndexJob类,此类必须实现IJob接口,我们定时做的工作,写在方法Execute里,代码如下
public class IndexJob : IJob//必须实现这个接口
{
//实现接口里面的这个方法,也就是写具体做的事,将明细表的数据插入到汇总表中(可以是一周内搜索的热词)
// 这里写的是本服务做得事
public void Execute(IJobExecutionContext context)
{
try
{
LogHelper.WriteLog(DateTime.Now.ToString() + "IndexJob=>context:开始执行定时服务");
LogHelper.WriteLog(DateTime.Now.ToString()+"定时服务结束了");
}
catch (Exception ex)
{
LogHelper.WriteLog(DateTime.Now.ToString() + "IndexJob=>context Exception:"+ex.Message);
throw;
}
}
}
4.接下来我们需要创建一个类StartService 这个类配置我们的任务和组。job使我们实例化的工作,刚才建的类IndexJob,注册到里面,并起个名字job1,triggrt使我们设置什么时候去触发,这里是每天的9:31:01执行,关于时间我们可以任意配置
以下是配置的规则,我们的需求模拟配就可以,(这几个规则数据,来源于网络)这是我平常的收集规则
"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的10分30秒触发任务
"30 10 1 * * ?" 每天1点10分30秒触发任务
"30 10 1 20 * ?" 每月20号1点10分30秒触发任务
"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 15到45秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
public class StartService
{
/// <summary>
/// 开启定时服务
/// </summary>
public static void Start()
{
LogHelper.WriteLog(DateTime.Now.ToString() + "StartService=》Start:开始配置服务");
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler scheduler = sf.GetScheduler(); //创建调度实例
//创建任务实例
IJobDetail job = JobBuilder.Create<IndexJob>().WithIdentity(new JobKey("job1")).Build();
//创建触发器实例
ITrigger trigger = TriggerBuilder.Create().StartAt(DateTime.Now.AddSeconds(0)).WithCronSchedule("01 31 9 * * ? ").Build();
LogHelper.WriteLog(DateTime.Now.ToString() + "StartService=》Start:开始绑定定时任务");
// 如果需要多个的话,只需要绑定多个即可
scheduler.ScheduleJob(job, trigger); //绑定触发器和任务
scheduler.Start(); //启动监控
LogHelper.WriteLog(DateTime.Now.ToString() + "StartService=》Start:开始监控定时任务");
}
}
如果我们有多个任务 只需要再建立一个job和trigger即可,然后同上加入这两行代码就行
scheduler.ScheduleJob(job, trigger); //绑定触发器和任务
scheduler.Start(); //启
当然,时间我们可以写在配置文件里,以后修改方便,
5我们最后在服务里调用即可
.
也可以在控制台等其他项目调用,这样一个定时服务,也就搭建完毕了。
原文地址:https://www.cnblogs.com/zhihuama/p/9152957.html