Quartz是一个Java开源的作业调度框架。官方网站:http://www.opensymphony.com/quartz/
IBM网站上有一篇简单易懂的文章:http://www.ibm.com/developerworks/cn/java/j-quartz/
Quartz.net是从java版本移植到.net版本的。官方网站:http://quartznet.sourceforge.net/
网上找了好多教程,但没有一篇是关于如何在ASP.NET中使用的代码。既然它适用于任何的.net程序,当然也就适用于asp.net的web应用。
(1)在web.config中进行相关配置
<
configSections
>
< 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 >
</ configSections >
< 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 >
</ configSections >
<
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 >
< 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 >
另外我自己加了一个配置项:
<
appSettings
>
< add key ="cronExpr" value ="0 0 8-17/1 ? * 2-6" />
</ appSettings >
< add key ="cronExpr" value ="0 0 8-17/1 ? * 2-6" />
</ appSettings >
(2)创建一个普通类,实现Quartz.IJob接口
public
class
RetrieveAj2003T140Job : Quartz.IJob
{
private static DataView aj2003View;
public RetrieveAj2003T140Job()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void Execute(Quartz.JobExecutionContext context)
{
//throw new Exception("The method or operation is not implemented.");
//你的处理逻辑,也就是“工作”
}
}
{
private static DataView aj2003View;
public RetrieveAj2003T140Job()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void Execute(Quartz.JobExecutionContext context)
{
//throw new Exception("The method or operation is not implemented.");
//你的处理逻辑,也就是“工作”
}
}
接口非常简单,只要在Execute()方法中进行逻辑处理就可以了。比如,读取数据库数据,或者是读取电子邮件。
(3)在Global.asax文件中启动工作调度
这便于我们在web应用启动时,就启动工作调度。
<%
@ Import Namespace
=
"
Quartz
"
%>
< script runat = " server " >
IScheduler sched;
void Application_Start( object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
sched = sf.GetScheduler();
JobDetail job = new JobDetail("job1", "group1", typeof(RetrieveAj2003T140Job));
string cronExpr = ConfigurationManager.AppSettings["cronExpr"];
CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1",cronExpr);
sched.AddJob(job, true);
DateTime ft = sched.ScheduleJob(trigger);
sched.Start();
}
void Application_End( object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
if (sched != null)
{
sched.Shutdown(true);
}
}
</ script >
< script runat = " server " >
IScheduler sched;
void Application_Start( object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
sched = sf.GetScheduler();
JobDetail job = new JobDetail("job1", "group1", typeof(RetrieveAj2003T140Job));
string cronExpr = ConfigurationManager.AppSettings["cronExpr"];
CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1",cronExpr);
sched.AddJob(job, true);
DateTime ft = sched.ScheduleJob(trigger);
sched.Start();
}
void Application_End( object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
if (sched != null)
{
sched.Shutdown(true);
}
}
</ script >
需要注意的是,当Application_End的时候,需要关闭Quartz的工作。
OK了,可以在ASP.NET中正常使用了。