C# Quartz.Net 定时任务的简单使用
2017-01-09 11:56
573 查看
最近做了一个定时执行任务的软件。
执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象。
我做的是每天的9点和16点执行一次任务,以此记录:
首先,获得Quartz.Net,
其实可以使用vs2015的Nuget管理器,下载。
我做了一个QuartzHelper,但是在主程序中,还是需要其他代码的。
这是QuartzHelper的代码:
大概的过程是这样的:
通过ISchedulerFactory实例化一个计划工厂对象,并使用工厂实例化一个scheduler计划对象,
然后实例化一个任务对象job,也就是定义任务内容的对象,需要传入一个实现IJob接口的类,这里我使用了泛型,
接着,需要一个能触发任务的对象,这里有两种,
一种是ITrigger,这是用于规格时间间隔,计划开始后,会根据间隔的时间值,触发执行任务;
另一种是ICronTrigger,这是通过Cron表达式规格执行的时间,计划开始后,如果时间符合规定时间,就触发执行任务。
最后,把job和trigger都传入计划scheduler,计划开始。
最下方的任务执行例是一个例子,
必须实现IJob接口和Execute方法。
如果需要在Execute方法内,调用类外部的数据,我是通过在项目中定义静态类的方法,供MyJob调用的。
程序开始计划的代码:
string cronExpression = "0 0 9,16 * * ? "; =>这是指每天的9点和16点执行任务
QuartzHelper.ExecuteByCron<MyJob>(cronExpression); =>这是调用Cron计划方法
简单说一下Cron表达式吧,
"0 0 9,16 * * ? ",
顺序从左到右
0:秒
0:分
9,16:小时,逗号分隔
如果需要更详细的说明,可以百度。
执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象。
我做的是每天的9点和16点执行一次任务,以此记录:
首先,获得Quartz.Net,
其实可以使用vs2015的Nuget管理器,下载。
我做了一个QuartzHelper,但是在主程序中,还是需要其他代码的。
这是QuartzHelper的代码:
1 using Quartz; 2 using Quartz.Impl; 3 4 namespace Cong.Utility 5 { 6 public class QuartzHelper 7 { 8 /// <summary> 9 /// 时间间隔执行任务 10 /// </summary> 11 /// <typeparam name="T">任务类,必须实现IJob接口</typeparam> 12 /// <param name="seconds">时间间隔(单位:毫秒)</param> 13 public static void ExecuteInterval<T>(int seconds) where T : IJob 14 { 15 ISchedulerFactory factory = new StdSchedulerFactory(); 16 IScheduler scheduler = factory.GetScheduler(); 17 18 //IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build(); 19 IJobDetail job = JobBuilder.Create<T>().Build(); 20 21 ITrigger trigger = TriggerBuilder.Create() 22 .StartNow() 23 .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever()) 24 .Build(); 25 26 scheduler.ScheduleJob(job, trigger); 27 28 scheduler.Start(); 29 } 30 31 /// <summary> 32 /// 指定时间执行任务 33 /// </summary> 34 /// <typeparam name="T">任务类,必须实现IJob接口</typeparam> 35 /// <param name="cronExpression">cron表达式,即指定时间点的表达式</param> 36 public static void ExecuteByCron<T>(string cronExpression) where T : IJob 37 { 38 ISchedulerFactory factory = new StdSchedulerFactory(); 39 IScheduler scheduler = factory.GetScheduler(); 40 41 IJobDetail job = JobBuilder.Create<T>().Build(); 42 43 //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); 44 //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3); 45 46 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() 47 //.StartAt(startTime).EndAt(endTime) 48 .WithCronSchedule(cronExpression) 49 .Build(); 50 51 scheduler.ScheduleJob(job, trigger); 52 53 scheduler.Start(); 54 55 //Thread.Sleep(TimeSpan.FromDays(2)); 56 //scheduler.Shutdown(); 57 } 58 } 59 60 #region 任务执行例 61 //public class MyJob : IJob 62 //{ 63 // public void Execute(IJobExecutionContext context) 64 // { 65 // Console.WriteLine("executed..." + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); 66 // } 67 //} 68 #endregion 69 }
大概的过程是这样的:
通过ISchedulerFactory实例化一个计划工厂对象,并使用工厂实例化一个scheduler计划对象,
然后实例化一个任务对象job,也就是定义任务内容的对象,需要传入一个实现IJob接口的类,这里我使用了泛型,
接着,需要一个能触发任务的对象,这里有两种,
一种是ITrigger,这是用于规格时间间隔,计划开始后,会根据间隔的时间值,触发执行任务;
另一种是ICronTrigger,这是通过Cron表达式规格执行的时间,计划开始后,如果时间符合规定时间,就触发执行任务。
最后,把job和trigger都传入计划scheduler,计划开始。
最下方的任务执行例是一个例子,
必须实现IJob接口和Execute方法。
如果需要在Execute方法内,调用类外部的数据,我是通过在项目中定义静态类的方法,供MyJob调用的。
程序开始计划的代码:
string cronExpression = "0 0 9,16 * * ? "; =>这是指每天的9点和16点执行任务
QuartzHelper.ExecuteByCron<MyJob>(cronExpression); =>这是调用Cron计划方法
简单说一下Cron表达式吧,
"0 0 9,16 * * ? ",
顺序从左到右
0:秒
0:分
9,16:小时,逗号分隔
如果需要更详细的说明,可以百度。
相关文章推荐
- Quartz.net 的简单使用,创建定时任务
- Quartz.Net的使用(简单配置方法)定时任务框架
- [C#]使用Quartz.NET来创建定时工作任务
- Quartz.Net的使用(简单配置方法)定时任务框架
- Quartz.Net的使用(简单配置方法)定时任务框架
- 使用Quartz.net、Topshelf、wcf命名管道制作的一个c#定时任务管理程序(热插拔)
- Quartz.Net的使用(简单配置方法)定时任务框架
- Asp.Net Core 使用Quartz基于界面画接口管理做定时任务
- 使用Quartz.Net构建简单的计划任务
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
- Spring与Quartz集成实现定时调度任务的简单使用
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 单例模式使用 Quartz.Net执行定时任务
- 使用System.Threading的Timer&Quartz.net两种方式实现定时执行任务,防止IIS释放timer对象
- [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- ASP.NET使用Quartz.NET实现定时任务调度
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度