基于MVC 的Quartz.Net组件实现的定时执行任务调度
新建mvc项目之后,首先引用Quartz组件。工具-->NuGet包管理器-->管理解决方案的 NuGet包管理器

组件安装完成。
Quartz.Net一个最简单任务至少包括三部分实现:job(作业),trigger(触发器)以及scheduler(调度器)。其中job 是你需要在一个定时任务中具体执行的业务逻辑,trigger则规定job何时并按照何种规则执行,最终job和trigger会被注册到 scheduler(调度器)中,scheduler负责协调job和trigger的运行。
在Quartz.Net中,一个job(作业)即为一个类,为了让job能在Quartz.Net的体系中执行,我们必须实现Quartz.Net提供的IJob接口的Execute方法,如本例所实现的IJob接口TestJob类:
public class TestJob : IJob
{
public static int Num = ;
public Task Execute(IJobExecutionContext context)
{ JobDataMap dataMap = context.JobDetail.JobDataMap;
string k = dataMap.GetString("key");//获取参数(可根据传递的类型使用GetInt、GetFloat、GetString.....)
// 在这里处理你的任务
Task task = null;
LogHelper.Info("执行了第"+ Num+++"次了");
return task;
}
}
接下来,我们需要实现一个trigge(触发器),示例代码如下:
public class JobScheduler {private static async void Start()
{
//从工厂中获取一个调度器实例化
scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start(); //创建一个作业
IJobDetail job1 = JobBuilder.Create<TestJob>()
.WithIdentity(jobName, gropName)
.UsingJobData("key", "value")// 传递参数 在Execute方法中获取(以什么类型值传入,取值就用相应的类型方法取值)
.Build(); // 创建触发器
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity(tiggerName, gropName)
.StartNow() //现在开始
.WithSimpleSchedule(x => x //触发时间,10秒一次。
.WithIntervalInSeconds()
.RepeatForever()) //不间断重复执行
.Build(); await scheduler.ScheduleJob(job1, trigger1); //把作业,触发器加入调度器。 Console.ReadKey(); // 清除任务和触发器
ClearJobTrigger();
} /// <summary>
/// 清除任务和触发器
/// </summary>
public static void ClearJobTrigger()
{
TriggerKey triggerKey = new TriggerKey(tiggerName, gropName);
JobKey jobKey = new JobKey(jobName, gropName);
if (scheduler != null)
{
scheduler.PauseTrigger(triggerKey);
scheduler.UnscheduleJob(triggerKey);
scheduler.DeleteJob(jobKey);
scheduler.Shutdown();// 关闭
} }
}
这个代码片段你可以放在你项目程序的任何可以被调用的地方,类名你也可以随意取,这没有什么关系的。只要在使用这个类时正确引用即可。
在代码中,我们使用StdSchedulerFactory.GetDefaultScheduler()创建了一个scheduler(调度器) 并随之 启动了这个调度器,然后创建了一个简单的Quartz.Net触发器并对这个触发器进行了一些配置:指定了触发器的名称为triggerName,触发器 的分组为groupName,指定每5秒触发一次并一直循环触发。最后通过scheduler.ScheduleJob()方法把job(作业)和 trigger(触发器)注册到了调度器中,这样一个完整的定时任务就定制完成了。
最后,我们还要做的一件事情就是启动我们定制好的定时任务,我们把这个任务放到项目程序的全局cs文件(Global.asax)的Application_Start方法中来执行:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); //启动定时任务
JobScheduler.Start();
}
}

基于MVC 的Quartz.Net组件实现的定时执行任务调度的更多相关文章
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...
- Quartz.Net实现的定时执行任务调度
在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和<简单.轻量.功能非常强大的C#/ASP.NET定时调度 ...
- MVC 使用Quartz.Net组件实现定时计划任务
最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.net 这个组件,挺简单的一个组件,实现起来特别的方便,灵活,值得推荐给大家一起学习一下这个小工具.以前我有的时候是使用定时器Time ...
- 基于ASP.NET MVC定时执行任务调度
相对FluentScheduler实现定时调度任务的使用简单,配置少的特点,Quartz.Net则配置稍微复杂一些.下面我们就接合一个 ASP.NET MVC网站应用程序的定时执行任务调试的小实例来了 ...
- ASP.NET MVC(C#)和Quartz.Net组件
ASP.NET MVC(C#)和Quartz.Net组件 在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和&l ...
- 控制台基于Quartz.Net组件实现定时任务调度(一)
前言: 你曾经需要应用执行一个任务吗?比如现在有一个需求,需要每天在零点定时执行一些操作,那应该怎样操作呢? 这个时候,如果你和你的团队是用.NET编程的话,可以考虑使用Quartz.NET调度器.允 ...
- Window服务基于Quartz.Net组件实现定时任务调度(二)
前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器). ...
- 基于.Net平台常用的组件和框架整理
转载自:http://www.cnblogs.com/hgmyz/p/5313983.html 基于转载进行补充 RPC框架: RPC:远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而 ...
- struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb
在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...
随机推荐
- 开源框架.netCore DncZeus学习(二)配置连接
配置连接字符串,update-database,初始数据后,访问报错,提示offset错误.因为本机上使用的sql2008. .net Core 2.X中的EF访问sqlserver2008默认使用的 ...
- win10和Ubuntu双系统安装过程中遇到的问题
1.安装过程 注意分区问题,很重要 https://blog.csdn.net/baobei0112/article/details/77996570 https://blog.csdn.net/s7 ...
- mysql 创建事件
mysql 事件说明: 创建事件CREATE EVENT 的语法如下:CREATE EVENT[IF NOT EXISTS] ------------------------------------- ...
- git常用命令(转载自用)
转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...
- luogu P4385 [COCI2009]Dvapravca
传送门 我真的弱,正解都不会还打了个错的暴力 考虑平行线与x轴平行,那么可以按照y为第一关键字升序,x为第二关键字升序排序,然后合法的一段红点就是连续的一段,答案也就是最大的连续红色段 推广到一般情况 ...
- 关于ajax及相关数据传输问题
之前整理的ajax相关应用笔记,一直没有时间整理,今天突然翻到特此将初稿大概的整理了一下,可能有点乱,欢迎指出不足之处. jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会 ...
- docker remote api 的安全隐患
开启docker的api,首先要知道docker的守护进程daemon,在下认为daemon作为Client和service连接的一个桥梁,负责代替将client的请求传递给service端. 默认情 ...
- MongoDB 学习手册 - CURD
mongoDB 增加数据 // mongoDB 增加数据: //新增数据insert( 字典 ) 表示插入一条数据,insert([字典]) 表示插入多条数据 // db.text01.insert( ...
- 使用jQuery重置(reset)表单的方法
由于JQuery中,提交表单是像下面这样的: 代码如下: $('#yigeform').submit() 所以,想当然的认为,重置表单,当然就是像下面这样子喽: 代码如下: $('#yigeform' ...
- js中创建数组,并往数组里添加元素
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...