Quartz.NET——作业调度组件
关于Quartz.NET,请访问它的网站:http://quartznet.sourceforge.net 下载Quartz.NET,请直接进这里:http://quartznet.sourceforge.net/download.html 首先看下在什么情况下我们会需要使用Quartz.NET来进行作业调度。在业务系统中,我们需要在每天的某一个时间点(例如晚上12点)中做一些统计报表的生成(例如生成当前的一些报表之类~);或者在网站中定时更新静态页面;或者在CRM中会在某些特殊的日子给予提醒。总之这些在根据预定好的时间规则里要去做某些事情的需求,都是可以用这个来解决的,当然了,前提是你开发的东西用的是.NET- -!
配置
使用Quartz.NET,我们需要在配置文件里面添加点东西,首先是configSections节点中,我们要添加已下内容:
1
2
3
4
|
< section name = "quartz" type = "System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> < sectionGroup name = "common" > < section name = "logging" type = "Common.Logging.ConfigurationSectionHandler, Common.Logging" /> </ sectionGroup > |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< common > < logging > < factoryAdapter type = "Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging" > < arg key = "showLogName" value = "true" /> < arg key = "showDataTime" value = "true" /> < arg key = "level" value = "DEBUG" /> < arg key = "dateTimeFormat" value = "HH:mm:ss:fff" /> </ factoryAdapter > </ logging > </ common > < quartz > < add key = "quartz.scheduler.instanceName" value = "ExampleDefaultQuartzScheduler" /> < add key = "quartz.threadPool.type" value = "Quartz.Simpl.SimpleThreadPool, Quartz" /> < add key = "quartz.threadPool.threadCount" value = "10" /> < add key = "quartz.threadPool.threadPriority" value = "2" /> < add key = "quartz.jobStore.misfireThreshold" value = "60000" /> < add key = "quartz.jobStore.type" value = "Quartz.Simpl.RAMJobStore, Quartz" /> </ quartz > |
Quartz.NET中几个重要的东西
2、作业调度器工厂接口 ISchedulerFactory:从命名来看,很明显是个工厂,专门产出IScheduler接口。
3、工作任务 JobDetail:它定义了你要定时去做什么工作,初始化一个该类的对象,我们要指定工作名(name),工作的组名(group),还有就是一个实现了IJob接口的类的类型(Type),就是说JobD定义的是做什么。
代码示例
下面用代码来说明问题,我们用代码来完成这样一个需求:在web项目中有一个txt文件(文件名为JobNotePad.txt),每隔十秒钟就把当前时间记录在里面。这里我们使用CronTrigger这种触发器来完成任务。首先我们要实现IJob接口,定义一个类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
using Quartz; namespace WebApplication.Common { public class MyJob : IJob { public void Execute(JobExecutionContext context) { try { var path = @"H:\代码\测试代码\Csharp测试\QuartzTest\WebApplication\WebApplication\JobNotePad.txt" ; var curText = System.IO.File.ReadAllText(path); System.IO.File.WriteAllText(path, curText + "\r\n" + DateTime.Now.ToString()); } catch (Exception ex) { throw ; } } } } |
接着我们要在Global.asax文件里写点代码,在网站开启的时候就开始作业,于是在Application_Start中加入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/// <summary> /// 作业调度器接口 /// </summary> IScheduler scheduler; protected void Application_Start( object sender, EventArgs e) { try { // 创建一个工作调度器工场 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 获取一个任务调度器 scheduler = schedulerFactory.GetScheduler(); // 创建一个工作 JobDetail job = new JobDetail( "jobname1" , "jobgroup1" , typeof (Common.MyJob)); // 创建一个触发器 CronTrigger trigger = new CronTrigger(); trigger.Name = "trigger1" ; trigger.JobName = "jobname1" ; trigger.JobGroup = "jobgroup1" ; trigger.Group = "triggergroup1" ; trigger.CronExpression = new CronExpression( "0/10 * * * * ?" ); scheduler.AddJob(job, true ); DateTime ft = scheduler.ScheduleJob(trigger); scheduler.Start(); } catch (Exception ex) { throw ex; } } |
1
2
3
4
|
protected void Application_End( object sender, EventArgs e) { scheduler.Shutdown( true ); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
protected void Application_Start( object sender, EventArgs e) { try { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.GetScheduler(); JobDetail job = new JobDetail( "jobname1" , "jobgroup1" , typeof (Common.MyJob)); // 创建一个触发器 SimpleTrigger trigger = new SimpleTrigger(); trigger.Name = "trigger1" ; trigger.JobName = "jobname1" ; trigger.JobGroup = "jobgroup1" ; trigger.Group = "triggergroup1" ; trigger.RepeatInterval = new TimeSpan(0, 0, 1); trigger.RepeatCount = 10; scheduler.AddJob(job, true ); DateTime ft = scheduler.ScheduleJob(trigger); scheduler.Start(); } catch (Exception ex) { throw ex; } } |
测试代码,我们只需要运行网站,然后查看根目录下的JobNotePad.txt文件就知道鸟!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。