天天看点

Quartz.Net与MVC结合定时任务

1.首先,我们打开Visual Studio 2015,创建一个ASP.NET MVC的Web应用程序项目。

2.然后通过程序包管理器控制台来安装Quartz.Net组件。

Quartz.Net一个最简单任务至少包括三部分实现:job(作业),trigger(触发器)以及scheduler(调度器)。

其中job 是你需要在一个定时任务中具体执行的业务逻辑,trigger则规定job何时并按照何种规则执行,最终job和trigger会被注册到 scheduler(调度器)中,scheduler负责协调job和trigger的运行。

3.创建Job类

 public class ReportJob : IJob
  {
    public void Execute(IJobExecutionContext context)//必须实现IJob接口下的Execute方法
    {
      var reportDirectory = string.Format("~/reports/{0}/", DateTime.Now.ToString("yyyy-MM"));
      reportDirectory = System.Web.Hosting.HostingEnvironment.MapPath(reportDirectory);
      if (!Directory.Exists(reportDirectory))
      {
        Directory.CreateDirectory(reportDirectory);
      }
      var dailyReportFullPath = string.Format("{0}report_{1}.log", reportDirectory, DateTime.Now.Day);
      var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
      File.AppendAllText(dailyReportFullPath, logContent);
    }
  }      

4.创建触发器trigge

public class ReportJobScheduler
    {
        public static void Start()
        {
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //从工厂中获取一个调度器实例化
            scheduler.Start();   //开始调度器
            IJobDetail job = JobBuilder.Create<ReportJob>().Build();//创建一个作业
            ITrigger trigger = TriggerBuilder.Create()
                .WithSimpleSchedule(t =>
                t.WithIntervalInSeconds(5) //触发执行,5s一次
                .RepeatForever())          //重复执行
                .Build();
            scheduler.ScheduleJob(job,trigger);       //把作业,触发器加入调度器。 
        }
    }      

5.把这个任务放到项目程序的全局cs文件(Global.asax)的Application_Start方法中来执行.

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //在这里调用
            ReportJobScheduler.Start();
        }      

6.之后启动网站,便会发现网站的根目录下有定时任务产生的文件和文件夹

7.这只是个简单的例子,参照http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html,这篇博客做的实验。

本实验源代码:https://git.oschina.net/sdadx/Quartz.Net/tree/master/