作业调度框架 【Quartz.NET】 的使用

Quartz.NET是一个强大、开源、轻量的作业调度框架。能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

官网:http://www.quartz-scheduler.net/

一、使用Nuget安装Quartz.NET

二、应用示例

让应用程序每隔5秒钟向C:\Quartz.txt文件中记录当前时间。

这是一个Web应用,我想让网站一启动时就开始该项工作,这里我们需要打开Global.asax.cs,将代码写在Application_Start方法中。

1. 定义一个任务类,实现Quartz.IJob接口,实现Execute方法

using Quartz;
    public class TimeJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            //向c:\Quartz.txt写入当前时间并换行
            System.IO.File.AppendAllText(@"c:\Quartz.txt", DateTime.Now+Environment.NewLine);
        }
    }

2.创建一个调度器。调度器负责管理与控制任务的执行。

Global.asax.cs文件中声明变量,

   //调度器
   IScheduler scheduler;
   //调度器工厂
   ISchedulerFactory factory;

Application_Start()方法中添加如下代码:

  //创建一个调度器
  factory = new StdSchedulerFactory();
  scheduler = factory.GetScheduler();
  scheduler.Start();

3. 创建一个任务对象。

这个任务对象就是我们将要执行的工作,job1是名称,group1是组名。在Application_Start()方法中添加如下代码:

   //2、创建一个任务
   IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").Build();

4.创建一个触发器。

触发器定义了什么时间任务开始或每隔多久执行一次。在Application_Start()方法中添加如下代码:

    //3、创建一个触发器
    //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
    ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                //.StartAt(runTime)
                .Build();

5.将任务与触发器添加到调度器中并执行。在Application_Start()方法中添加如下代码:

    //4、将任务与触发器添加到调度器中
    scheduler.ScheduleJob(job, trigger);
    //5、开始执行
    scheduler.Start();

6. 应用关闭时结束任务。

Shutdown方法中的参数true的意思为:是否等待任务的完成再结束。在Global.asax.cs中的Application_End()方法中添加如下代码:

    //   在应用程序关闭时运行的代码
    if (scheduler != null)
    {
         scheduler.Shutdown(true);
    }
 *****************************
 *** Keep learning and growing. ***
 *****************************

猜你喜欢

转载自www.cnblogs.com/gangle/p/9316037.html