Quartz.Net与MVC结合定时任务

时间:2022-01-18 12:20:29

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

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

Quartz.Net与MVC结合定时任务

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.之后启动网站,便会发现网站的根目录下有定时任务产生的文件和文件夹

Quartz.Net与MVC结合定时任务

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/