zoukankan      html  css  js  c++  java
  • 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所有异常

  • 相关阅读:
    20165103 第四周查漏补缺
    20165103 2017-2018-2 《Java程序设计》第3周学习总结
    20165103 2017-2018-2 《Java程序设计》第2周学习总结
    20165103 2017-2018-2 《Java程序设计》第1周学习总结
    MySQL事务一致性理解
    mysql的事务四个特性以及 事务的四个隔离级别
    序列化和反序列化的简单理解
    内存溢出和内存泄漏的区别,产生原因以及解决方案
    oracle入门学习之oracle数据库结构
    Java微服务(Spring-boot+MyBatis+Maven)入门教程
  • 原文地址:https://www.cnblogs.com/yabisi/p/6007510.html
Copyright © 2011-2022 走看看