asp.net定時任務


  1.  我們這邊使用的定時任務框架是Quartz.Net,可以實現異常靈活的定時任務,開發人員只要編寫少量的代碼就可以實現“每隔一小時執行”、每天22點執行,每月18日下午執行等等各種定時任務。
  2. Quartz.Net中的概念:計划者(IScheduler)、工作(IJob)、觸發器(Trigger).給計划者一個工作,讓他在Trigger(什么條件下做這件事情)觸發的條件下執行這個工作。
  3. 將要執行的任務的代碼寫到實現IJob接口的Execute方法中即可,時間到來的時候Execute方法會被調用。
  4. CrondTrigger是通過Crond表達式設置的觸發器,還有SimpleTrigger等簡單的觸發器。可以通過TriggerUtils的MakeDailyTrigger、MakeHourlyTRigge等方法調用,調用代碼如下:
    第一個用戶訪問我們的WebApplication的時候,Application_Start才運行。
    
    //0 15 10 ? * *" :Fire at 10:15am every day 
                CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1");
                trigger.CronExpressionString = “0 15 10 ? * *”;
    
    //上面的代碼是用表達式靈活配置任務執行時間的,很復雜也沒去了解,下面的是簡單的
    //每隔一段時間執行任務
    IScheduler sched;
     ISchedulerFactory sf = new StdSchedulerFactory();
                sched = sf.GetScheduler();
                JobDetail job = new JobDetail("job1", "group1", typeof(IndexJob));//IndexJob為實現了IJob接口的類
                DateTime ts = TriggerUtils.GetNextGivenSecondDate(null, 5);//5秒后開始第一次運行
                TimeSpan interval =  TimeSpan.FromHours(1);//每隔1小時執行一次
     Trigger trigger = new SimpleTrigger("trigger1", "group1", "job1", "group1", ts, null,
                                             SimpleTrigger.RepeatIndefinitely, interval);//每若干小時運行一次,小時間隔由appsettings中的IndexIntervalHour參數指定
    
                sched.AddJob(job, true);
                sched.ScheduleJob(trigger);
                sched.Start();
    要關閉任務定時則需要sched.Shutdown(true) 在application_end中執行

     實現步驟:

   ①引用quart.Net的DLL庫可以在這里下載:http://pan.baidu.com/s/1i5e7U5Z

   ②寫一個實現IJob接口的類並實現接口的方法,在此方法里面寫代碼就可以了。

   ③關於quartz在asp.net中的代碼如下:

namespace EazyBPMS.Web
{
    public class Global : System.Web.HttpApplication
    {
        IScheduler sched;
        protected void Application_Start(object sender, EventArgs e)
        {
            //每隔一段時間執行任務
           
            ISchedulerFactory sf = new StdSchedulerFactory();
            sched = sf.GetScheduler();
            JobDetail job = new JobDetail("job1", "group1", typeof(IndexJob));//IndexJob為實現了IJob接口的類
            DateTime ts = TriggerUtils.GetNextGivenSecondDate(null, 5);//5秒后開始第一次運行
            //第一個版本示例代碼每隔幾小時 幾分鍾  幾秒鍾執行
            //TimeSpan interval = TimeSpan.FromHours(1);//每隔1小時執行一次
            //Trigger trigger = new SimpleTrigger("trigger1", "group1", "job1", "group1", ts, null,
            //                            SimpleTrigger.RepeatIndefinitely, interval);//每若干小時運行一次,小時間隔由appsettings中的IndexIntervalHour參數指定
            //第二個版本每天哪個時間段執行
            Trigger trigger = TriggerUtils.MakeDailyTrigger("trigger1", 9, 40);
            trigger.JobName = "mujob";
            trigger.Group = "group1";
            trigger.JobGroup = "jobgroup";
            //第二個版本結束
            sched.AddJob(job, true);
            sched.ScheduleJob(trigger);
            sched.Start();

        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {
            sched.Shutdown(true);

        }
    }
}
View Code

 需要注意的是,在excute中出現異常不會在界面上拋出來會直接弄死quartz,所以要在excute里面try...catch所有異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM