//定时任务框架Quartz.net
//Quartz.Net是从Java版的Quartz移植过来的
//少量代码完成定制任务 如每隔多长时间执行 定时执行 定时执行几次
//基本概念:计划者(IScheduler) 工作(IJob) 触发器(Trigger)
//给计划者一个任务,让他在触发器触发的条件下执行这个工作
//(将要定时执行的任务的代码写到实现IJob接口的Execute方法中即可,时间到,Execute方法会被调用)
//安装方法:Install-package Quartz -Version 2.5.0 (版本变化大)
//调用TestJob类Exceute方法
//IScheduler sched = new StdSchedulerFactory().GetScheduler(); //JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob)); //// 每天23.45执行任务 //IMutableTrigger trggerBossReport = CronScheduleBuilder.DailyAtHourAndMinute(23, 45).Build(); //// 每周固定时间执行任务 每周五周六23.45执行 //// CronScheduleBuilder.AtHourAndMinuteOnGivenDaysofWeek(23, 45,DayOfWeek.Friday,DayOfWeek.Sunday); //// 每周固定时间执行任务 //// CronScheduleBuilder.WeelklyOnDayAndHourAndMinute(); //// 每月固定时间执行任务 //// CronScheduleBuilder.MonthlyOnDayAndHourAndMinute(); ////Crond表达式 CronScheduleBuilder.CromSchedule("表达式"); //trggerBossReport.Key = new TriggerKey("triggerTest"); //sched.ScheduleJob(jdBossReport, trggerBossReport); ////启动 //sched.Start();
TestJob类 (TestJob类有点小问题,待解决)
namespace pro { public class TestJob:IJob { public void Exceute(IJobExecutionContext context) { try { Console.WriteLine("任务执行啦"+DateTime.Now); SqlConnection conn = new SqlConnection(); conn.Open(); Console.WriteLine("任务执行完毕"); } catch(Exception ex) { Console.WriteLine("定时任务执行错误",ex); // ILog log = LogManager.GetLogger(typeof(TestJob)); // log.Error("定时任务执行错误",ex); } try { string path=HostingEnvironment.MapPath("~/web.config"); File.AppendAllText(@"d:/log.txt", path + " "); } catch (Exception ex) { File.AppendAllText(@"d:/log.txt", "出搓啦" + ex + " "); } } } }
//IJob 中Execute方法异常不会显示,为解决此问题建议 try{} catch{}finally{}
//IJob 是单独的线程 是拿不到HTTPContext的 使用MapPath需要HostingEnvironment.MapPath
//也不可以做Request Session Web相关工作
////如何执行多个任务?
//IScheduler sched = new StdSchedulerFactory().GetScheduler(); ////=====================多个任务可重写(JobDetail和Trgger的名字不要重复)============================================ //{ // JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob)); // CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create(); // builder.WithInterval(1, IntervalUnit.Second); // IMutableTrigger trggerBossReport = builder.Build(); // trggerBossReport.Key = new TriggerKey("triggerTest"); // sched.ScheduleJob(jdBossReport, trggerBossReport); //} //{ // JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob)); // CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create(); // builder.WithInterval(5, IntervalUnit.Second); // IMutableTrigger trggerBossReport = builder.Build(); // trggerBossReport.Key = new TriggerKey("triggerTest"); // sched.ScheduleJob(jdBossReport, trggerBossReport); //} ////===================================================================================== //sched.Start(); //Console.ReadLine();
//优秀开源定时调度框架 :hangFire
http://hangfire.io/
优点:带任务监控界面,高级版收费