C#实现的调用Quartz.dll的定时任务插件
2017-07-15 09:50
471 查看
有两个cs文件。
第一个QuartzJob.cs 源码:
第二个QuartzWorker.cs 源码:
引用的Quartz.dll是1.0版本的。
global.asax中调用方法:
static QuartzWorker worker;
protected void Application_Start(Object sender, EventArgs e)
{
worker = new QuartzWorker();
NewsUpdateWork newsWork = new NewsUpdateWork();
worker.AddWork(newsWork);
worker.Start();
}
newsupdatework.cs的写法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SXF.Utils;
using SXF.Utils.QuartzScheduler;
namespace xxx.Facade.Task
{
/// <summary>
/// news表当isupdate=0时,自动重新生成新闻静态页面
/// </summary>
public class NewsUpdateWork : QuartzJob
{
public NewsUpdateWork()
{
//CronExpression = "0 0/1 * * * ?";
//每天21点-24点,0点-7点,每隔5分钟执行一次
//CronExpression = "0 0/5 18-23,0-9 * * ?";
CronExpression = "0 0/5 * * * ?";
RepeatInterval = new TimeSpan(0, 0, 0);
RepeatCount = 0;
DoWork += new EventHandler(this_DoWork);
}
public void this_DoWork(object sender, EventArgs e)
{
//这里写你要处理的定时任务
}
}
}
第一个QuartzJob.cs 源码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Quartz; namespace SXF.Utils.QuartzScheduler { /// <summary> /// 任务接口 /// 优先使用Cron表达式,如果为空,则使用重复规则 /// </summary> public class QuartzJob : IJob { //string JobName { get; } //string JobGroup { get; } /// <summary> /// Cron表达式 /// </summary> public string CronExpression; /// <summary> /// 重复间隔 /// </summary> public TimeSpan RepeatInterval; /// <summary> /// 重复次数 /// </summary> public int RepeatCount; /// <summary> /// 执行的任务委托 /// </summary> public event EventHandler DoWork; static object lockObj = new object(); public void Execute(Quartz.JobExecutionContext context) { string name = context.JobDetail.Name; if (QuartzWorker.workCache[name]) { EventLog.Log(DoWork.Target.GetType() + " 没运行完又自动触发,被忽略", "info"); return; } QuartzWorker.workCache[name] = true; try { DoWork(null, null); } catch (Exception ero) { EventLog.Log(DoWork.Target.GetType() + " 执行出错:" + ero, true); } QuartzWorker.workCache[name] = false; } } }
第二个QuartzWorker.cs 源码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Quartz; using Quartz.Impl; namespace SXF.Utils.QuartzScheduler { /// <summary> /// QuartzWorker自动任务 /// </summary> public class QuartzWorker { IScheduler scheduler; public QuartzWorker() { // 创建一个工作调度器工场 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 获取一个任务调度器 scheduler = schedulerFactory.GetScheduler(); } public static Dictionary<string, bool> workCache = new Dictionary<string, bool>(); /// <summary> /// 添加一个任务 /// </summary> /// <param name="job"></param> public void AddWork(QuartzJob job) { Type type = job.GetType(); // 创建一个工作 string jobName = "JobName_" + type; string jobGroup = "JobGroup_" + type; JobDetail jobDetail = new JobDetail(jobName, jobGroup, type); // 创建一个触发器 Trigger trigger; //使用Cron表达式 if (!string.IsNullOrEmpty(job.CronExpression)) { CronTrigger cronTrigger = new CronTrigger(); cronTrigger.CronExpression = new CronExpression(job.CronExpression); trigger = cronTrigger; } else//指定间隔次数 { if (job.RepeatInterval.TotalSeconds == 0) throw new Exception("job.RepeatInterval为0"); if (job.RepeatCount == 0) throw new Exception("job.RepeatCount为0"); SimpleTrigger simpleTrigger = new SimpleTrigger(); simpleTrigger.RepeatInterval = job.RepeatInterval; simpleTrigger.RepeatCount = job.RepeatCount; trigger = simpleTrigger; } trigger.Name = "trigger" + jobName; trigger.JobName = jobName; trigger.JobGroup = jobGroup; trigger.Group = "triggergroup" + jobName; scheduler.AddJob(jobDetail, true); DateTime ft = scheduler.ScheduleJob(trigger); workCache.Add(jobDetail.Name, false); } /// <summary> /// 开始运行 /// </summary> public void Start() { scheduler.Start(); EventLog.Info("QuartzWorker已启动"); } /// <summary> /// 停止运行 /// </summary> public void Stop() { scheduler.Shutdown(true); EventLog.Info("QuartzWorker已停止"); } } }
引用的Quartz.dll是1.0版本的。
global.asax中调用方法:
static QuartzWorker worker;
protected void Application_Start(Object sender, EventArgs e)
{
worker = new QuartzWorker();
NewsUpdateWork newsWork = new NewsUpdateWork();
worker.AddWork(newsWork);
worker.Start();
}
protected void Application_End(Object sender, EventArgs e) { //在应用程序关闭时运行的代码 if (worker != null) { worker.Stop(); } }
newsupdatework.cs的写法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SXF.Utils;
using SXF.Utils.QuartzScheduler;
namespace xxx.Facade.Task
{
/// <summary>
/// news表当isupdate=0时,自动重新生成新闻静态页面
/// </summary>
public class NewsUpdateWork : QuartzJob
{
public NewsUpdateWork()
{
//CronExpression = "0 0/1 * * * ?";
//每天21点-24点,0点-7点,每隔5分钟执行一次
//CronExpression = "0 0/5 18-23,0-9 * * ?";
CronExpression = "0 0/5 * * * ?";
RepeatInterval = new TimeSpan(0, 0, 0);
RepeatCount = 0;
DoWork += new EventHandler(this_DoWork);
}
public void this_DoWork(object sender, EventArgs e)
{
//这里写你要处理的定时任务
}
}
}
相关文章推荐
- Spring结合Quartz实现多任务定时调用(转)
- Spring结合Quartz实现多任务定时调用
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- Spring结合Quartz实现多任务定时调用
- 在Grails中使用Quartz插件实现定时任务
- C#反射动态调用dll中的方法及使用QuartZ.net实现作业调度
- Spring中使用quartz插件实现定时任务
- Spring结合Quartz实现多任务定时调用
- Spring结合Quartz实现多任务定时调用
- 关于Java Web 使用Spring中使用Quartz(定时调用、实现固定时间执行), 触发定时器(执行某些任务)的实例
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- CAD插件技术真心不难,无非是画点线条,CAD内部能实现的,C#调用acdbmgd.dll和acmgd.dll也能实现
- Spring Quartz 实现多任务定时调用
- Spring结合Quartz实现多任务定时调用
- 【转】Spring结合Quartz实现多任务定时调用
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- Spring结合Quartz实现多任务定时调用
- C#利用定时任务插件实现在后台线程中批量把动态文件生成静态文件方法