在ASP.NET中使用Quartz.net进行工作调度

    技术2022-05-11  4

    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 >      < 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 > 另外我自己加了一个配置项: < 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.");        //你的处理逻辑,也就是“工作”    }} 接口非常简单,只要在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 > 需要注意的是,当Application_End的时候,需要关闭Quartz的工作。 OK了,可以在ASP.NET中正常使用了。


    最新回复(0)