前言:

你曾经需要应用执行一个任务吗?比如现在有一个需求,需要每天在零点定时执行一些操作,那应该怎样操作呢?

这个时候,如果你和你的团队是用.NET编程的话,可以考虑使用Quartz.NET调度器。允许开发人员根据日期间隔来实现任务调度任务。非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。

Quartz一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植每隔,基于C#写成,可应用于winform、asp.net、asp.net core应用中。提供了巨大的灵活性,是一个更为强大,方便管理,集群部署的作业调度框架。

所以,有时候项目需要在不同时刻,执行一个或很多个不同的作业,你可以用它来完成执行创建简单或复杂的任务调度。

导图:

特性:

1:支持集群,作业分组,作业远程管理。

2:自定义精细的时间触发器,使用简单,作业和触发分离。

3:数据库支持,可以寄宿Windows服务,WebSite,winform等。

概念:

Scheduler        作业调度器

所有的scheduler都应该由SchedulerFactory来创建

 //创建schedulerScheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

IJob             作业接口,继承并实现Execute, 编写执行的具体作业逻辑。

通过实现IJob接口来使你的.NET组件可以很简单地被scheduler执行

    public class ConsoleJob : IJob{public Task Execute(IJobExecutionContext context){return Console.Out.WriteLineAsync($"执行作业");}}

JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。

JobBuilder是一个建造者模式,链式建造。通过静态方法构建一个JobBuilder实例,然后再调用类方法Build()创建一个IJobDetail的实现。

public static JobBuilder Create(Type jobType)
{JobBuilder b = new JobBuilder();b.OfType(jobType);return b;
}

TriggerBuilder   根据规则,生产对应的Trigger,触发器可以规划执行任务

通过静态方法构建一个TriggerBuilder实例,然后再调用类方法Build()创建一个ITrigger的实现。

public static TriggerBuilder Create()
{return new TriggerBuilder();
}

根据任务设置触发的开始时间和结束时间

    /// <summary>/// 开始时间/// </summary>/// <param name="startTimeUtc"></param>/// <returns></returns>public TriggerBuilder StartAt(DateTimeOffset startTimeUtc){startTime = startTimeUtc;return this;}/// <summary>/// 结束时间/// </summary>/// <param name="endTimeUtc"></param>/// <returns></returns>public TriggerBuilder EndAt(DateTimeOffset? endTimeUtc){endTime = endTimeUtc;return this;}

步骤:

1、创建一个ISchedulerFactory,然后并且获取 Scheduler

2、启动 Scheduler

3、创建 job 任务

4、创建 trigger 触发器

5、使用触发器规划执行任务

开始:

注意:

新建一个Quartz项目后,需要安装下面的程序包:

你可以用控制台命令的方式安装

Install-Package Quartz

也可以使用下面这种方式选择安装版本

一、创建一个scheduler的引用:

            ISchedulerFactory schedFact = new StdSchedulerFactory();IScheduler sched = await schedFact.GetScheduler();

二、启动 scheduler:

            await sched.Start();

三、实现IJob:

ConsoleJob.cs 实现IJob,在Execute方法里编写要处理的业务逻辑,系统就会按照Quartz的配置,定时处理

    /// <summary>/// 实现IJob,Execute方法里编写要处理的业务逻辑/// </summary>public class ConsoleJob : IJob{public Task Execute(IJobExecutionContext context){return Console.Out.WriteLineAsync($"ConsoleJob执行工作 在当前时间{DateTime.Now}--上一次执行时间:{DateTime.Now.AddSeconds(-5)}");}}

四、创建trigger:(建立一个某个时间点的触发器,并且每5秒执行一次)

            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1")  //触发器 组.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).Build();

五、触发器执行任务:

            await sched.ScheduleJob(job, trigger);

将几个步骤整合后代码如下:

        /// <summary>/// 任务调度的使用过程/// </summary>/// <returns></returns>public async static Task Run(){// 1.创建scheduler的引用ISchedulerFactory schedFact = new StdSchedulerFactory();IScheduler sched = await schedFact.GetScheduler();//2.启动 schedulerawait sched.Start();// 3.创建 jobIJobDetail job = JobBuilder.Create<ConsoleJob>().WithIdentity("job1", "group1").Build();// 4.创建 trigger (创建 trigger 触发器)ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1")  //触发器 组.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).Build();// 5.使用trigger规划执行任务job (使用触发器规划执行任务)await sched.ScheduleJob(job, trigger);}

运行:

间隔5秒执行一次后的效果:

附加:

这里使用的quartz为3.x 版本,整个版本相对于2.0版本进行了大量的修改,正式支持了.NET Core 和async/await

引用张队文章的内容:

总结:

1.其实在实际项目中,可以将上面的方法进行封装处理,形成不同的任务,特别是处理多任务的时候,在不同的job中调用不同的trigger,后续会继续完善开发

2.quartz还有更多的用法,可以参考资料:Quartz.Net官方文档   和  Quartz.Net开源地址

3.项目源码地址

转载于:https://www.cnblogs.com/i3yuan/p/11332931.html

控制台基于Quartz.Net组件实现定时任务调度(一)相关推荐

  1. Spring与Quartz的整合实现定时任务调度

    Spring与Quartz的整合实现定时任务调度 摘自: http://kevin19900306.iteye.com/blog/1397744 最近在研究Spring中的定时任务功能,最好的办法当然 ...

  2. 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架

    Quartz,水晶.石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架. 何为定时任务调 ...

  3. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度

    在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和<简单.轻量.功能非常强大的C#/ASP.NET定时调度 ...

  4. 一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

    前言 之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介 GitHub开源地址:l2999019/GZY.Quart ...

  5. 十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务

     搭建基于Quartz组件的定时调度任务 先在package包项目下,添加Quartz定时器组件: 新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫Qu ...

  6. Java基于Quartz的定时任务调度服务(一)

    Quartz的基本用法 一 Quartz的简单介绍 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现,一个优秀的开源调度框架,其特点是:强大的 ...

  7. .net 任务调度 mysql_C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件...

    C#/.NET/.NET Core的定时任务调度组件:Timer.FluentScheduler.TaskScheduler.Gofer.NET.Coravel.Quartz.NET.Hangfire ...

  8. Spring和Quartz实现的定时任务调度

    Corn表达式 一.增加所依赖的JAR包 1. 增加Spring的Maven依赖 [html] view plaincopy <dependency> <groupId>org ...

  9. ASP.NET MVC5 实现基于Quartz.NET任务调度

    ASP.NET MVC5 实现基于Quartz.NET任务调度 工作之余.技术?.记是不可能记住的. 只有写点东西 才能维持得了生活这样子的.好早就像写一篇关于任务调度的文章.终究是太懒了 一.Qua ...

最新文章

  1. centOS 7 安装man中文版手册
  2. FVR420v试用感受之六!
  3. 2020年李永乐线性代数强化笔记-向量
  4. linux系统服务总结之五:用lamp建一个自己的BBS(LINUX环境下)
  5. Windows下的bat原来可以为我们做很多
  6. 线性插值改变图像尺寸_图像分割--gt;上采样的那些事
  7. 第5章 编写主引导扇区代码
  8. 如何使用SQL Server配置管理器
  9. [ZJOI2007][BZOJ1059] 矩阵游戏|二分图匹配|匈牙利算法
  10. MVC创建通用DropdownList
  11. 美国将采纳TMF智慧城市成熟度模型
  12. 余光中 听那冷冷的雨
  13. 如何搭建公司知识共享平台
  14. FillRect与FrameRect用法
  15. 微型计算机故障分为哪几类,西南大学19秋[0240] 计算机维修技术在线作业
  16. Windows10 mysql解决MySQL服务无法启动 系统出错 发生系统错误 1067
  17. 蓝桥杯龟兔赛跑预测Python(超详细!!)
  18. 记录笔记时得到的人生的两个道理
  19. 解决32位Eclipse和64位Eclipse在64位win7系统上运行问题
  20. 数据库查询报错Error Code 1064

热门文章

  1. 太爽了!35岁程序员被裁后反而实现财富自由!
  2. 2016天津成考计算机试题,2016年天津事业单位考试《职业能力测验》(部分)试题及答案解析...
  3. [多媒体] 音频的左右声道
  4. 零基础入门学习Python视频(全42集)
  5. 几个设计原则的优先级排序
  6. 需求与商业模式创新-商业模式考试复习
  7. deployer安装
  8. 【睡眠障碍】睡觉前数绵羊对睡眠障碍没有作用
  9. 计算机科学湖北的大学排行,2015年湖北省大学最佳专业排行榜
  10. 【哈利波特全集】哈利波特1-7