Quartz.NET初步运用

前言   前段时间工作比较闲暇,上网闲逛发现了一个作业调度框架Quartz.NET,挺新奇的。正好没事干拿来练练手!   Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。 它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。(抄的)   用这个东西无非就是有这么一种需求,需要在特定的时间做某些事情。比如我们想在凌晨2点做一次静态页面更新。或者在一个特别的日子发一封邮件==。花了两天弄懂简单的定时任务,做了一个东西 先上图: 上图中的操作将会在2012-3-24开始每天晚上11点40分 发送一封邮件。当然这只是一个简单的实例测试用的。邮件的内容和发送的邮件我都定死了。 要实现这些功能我们 首先要 获取一个任务调度器 然后再 创建一个工作 (就是要做什么) 创建一个触发器 (就是什么时候做) 最后启动这个调度器。 在11点40分的时候 我如期收到了邮件。 上图是我的工程截图 SchedulerManager是调度器 它用来获取调度器 public static class SchedulerManager { private static IScheduler scheduler; private static readonly object lockObj = new object(); private static readonly object lockObj1 = new object(); private static ISchedulerFactory sf; public static ISchedulerFactory GetSchedulerFactory() { if (sf == null) { lock (lockObj1) { if (sf == null) { sf = new StdSchedulerFactory(); } } } return sf; } public static IScheduler GetScheduler() { if (scheduler == null) { lock (lockObj) { if (scheduler == null) { //获取默认调度器 scheduler = GetSchedulerFactory().GetScheduler(); } } } return scheduler; } } 复制代码 JobManager是工作管理 他用来添加工作并启动 /// /// 添加一个工作并启动 /// /// 工作的类名 /// 工作名 /// Cron表达式 /// public static bool AddJob(HttpRequestBase Request) { string JobClassName = GetRequestInfo.getJobClass(Request); string JobName = GetRequestInfo.getJobName(Request); string Cron = GetRequestInfo.getCron(Request); DateTime beginTime = GetRequestInfo.beginDateTime(Request); DateTime? endTime = GetRequestInfo.endDateTime(Request); Dictionary jobInfos = GetRequestInfo.jobInfos(Request); TimeSpan triggertime = GetRequestInfo.getTriggerTime(Request); // 获取一个任务调度器 //ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 获取一个任务调度器 //IScheduler scheduler = schedulerFactory.GetScheduler(); IScheduler scheduler = SchedulerManager.GetScheduler(); // 创建一个工作 Type type = JobClassReturn.jobClassReturn(JobClassName); JobDetail job = new JobDetail(JobName, JobClassReturn.DEFAULT_GROUP, type); // 创建一个触发器 try { CronTrigger trigger = new CronTrigger(); trigger.Name = Guid.NewGuid().ToString(); trigger.JobName = JobName; trigger.JobGroup = JobClassReturn.DEFAULT_GROUP; trigger.Group = JobClassReturn.DEFAULT_Trigger_GROUP; trigger.CronExpression = new CronExpression(Cron); trigger.StartTimeUtc = beginTime; trigger.EndTimeUtc = endTime; scheduler.AddJob(job, true); if (endTime != null) { doDelete(scheduler, (DateTime)endTime); } DateTime ft = scheduler.ScheduleJob(trigger); } catch { return false; } if (!scheduler.IsStarted) { scheduler.Start(); } return true; } 复制代码 其中 GetRequestInfo类是我封装的生产cron表达式的类,具体触发的规则可以自己定义,这里有cron表达式比较详细的讲解。 我们要添加一个Job必须实现IJob的接口如: class IJobDeleteExpired:IJob { public void Execute(Quartz.JobExecutionContext context) { try { string sql = "delete from [T_RunJob] where endDateTime<='" + DateTime.Now.ToLocalTime() + "'"; SqlServerClass ssc = new SqlServerClass(); ssc.MySqlExcute(sql); } catch (Exception ex) { throw; } } } 复制代码 当然我们如果要停止这个工作也是可以的 public ActionResult EndScheduler(string jobName) { try { IScheduler scheduler = SchedulerManager.GetScheduler(); if (scheduler.IsStarted) { //要停止工作的 工作名,工作组名 scheduler.DeleteJob(jobName,JobClassReturn.DEFAULT_GROUP); } return this.Json(1); } catch (Exception ee) { return this.Json(ee.Message); } } 复制代码 好了 到这里就是初步的Quartz.NET运用 作者:梨洛 出处: "http://www.cnblogs.com/wujie6166/ 欢迎任何形式的转载,但请务必注明出处。

你可能感兴趣的:(quartz)