定时任务框架Quartz.net

//定时任务框架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 + "\r\n");
            }
            catch (Exception ex)
            {
                File.AppendAllText(@"d:/log.txt", "出搓啦" + ex + "\r\n");

            }
           
        }
    }
}

//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/

优点:带任务监控界面,高级版收费

 

posted @ 2019-01-20 16:59  下边的风  阅读(164)  评论(0编辑  收藏  举报