quzrtz 2.0 定时任务

Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。

Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。

 

参考

官方学习文档:http://www.quartz-scheduler.net/documentation/index.html

使用实例介绍:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

我们需要明白 Quartz 的几个核心概念,这样理解起 Quartz 的原理就会变得简单了。

1.Job 表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:
void execute(JobExecutionContext context)
2。JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
3.Trigger 代表一个调度参数的配置,什么时候去调。
4.Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。

 

先在一个运行函数里建立调度器和任务,任务属性,HelloJob是一个单独任务定时执行

namespace quartzWinform
{
public class Program
{
//调度器
public static IScheduler scheduler;
//调度器工厂
public static ISchedulerFactory factory;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
protected static void Main(string[] args)
{

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

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

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

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

}

}

}

HelloJob继承IJob,实现execute方法,自动运行

using log4net;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QuartzDemo.QuartzJobs
{
    public sealed class TestJob : IJob
    {
        private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));

        public void Execute(IJobExecutionContext context)
        {
            _logger.InfoFormat("TestJob测试");
        }
    }
}

ps: .Net Framework 4 和 .Net Framework 4.6 都支持Quartz 2.3.2和Topshelf3.0.2
posted @ 2020-11-16 13:33  蓁蓁  阅读(143)  评论(0编辑  收藏  举报