c#quartz触发_C# Quartz.Net 定时任务的简单使用

本文介绍了如何在C#中使用Quartz.Net库创建定时任务。示例展示了如何设置每日9点和16点执行任务,通过Cron表达式控制执行时间,并且提到了任务异常时的日志记录和邮件通知功能。
摘要由CSDN通过智能技术生成

最近做了一个定时执行任务的软件。

执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象。

我做的是每天的9点和16点执行一次任务,以此记录:

首先,获得Quartz.Net,

其实可以使用vs2015的Nuget管理器,下载。

我做了一个QuartzHelper,但是在主程序中,还是需要其他代码的。

这是QuartzHelper的代码:

1 usingQuartz;2 usingQuartz.Impl;3

4 namespaceCong.Utility5 {6 public classQuartzHelper7 {8 ///

9 ///时间间隔执行任务10 ///

11 /// 任务类,必须实现IJob接口

12 /// 时间间隔(单位:毫秒)

13 public static void ExecuteInterval(int seconds) whereT : IJob14 {15 ISchedulerFactory factory = newStdSchedulerFactory();16 IScheduler scheduler =factory.GetScheduler();17

18 //IJobDetail job = JobBuilder.Create().WithIdentity("job1", "group1").Build();

19 IJobDetail job = JobBuilder.Create().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 ///

32 ///指定时间执行任务33 ///

34 /// 任务类,必须实现IJob接口

35 /// cron表达式,即指定时间点的表达式

36 public static void ExecuteByCron(string cronExpression) whereT : IJob37 {38 ISchedulerFactory factory = newStdSchedulerFactory();39 IScheduler scheduler =factory.GetScheduler();40

41 IJobDetail job = JobBuilder.Create().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 : IJob62 //{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(cronExpression);=>这是调用Cron计划方法

简单说一下Cron表达式吧,

"0 0 9,16 * * ?",

顺序从左到右

0:秒

0:分

9,16:小时,逗号分隔

如果需要更详细的说明,可以百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值