Quartz.NET作为一款定时框架,它的最小可运行程序如下:

    var scheduler = StdSchedulerFactory.GetDefaultScheduler();

    scheduler.Start();

    //Job执行的任务
var job = JobBuilder.Create<MyJob>().Build(); //Schedule计划表,可以设置调用次数,调用间隔
//Trigger触发器,可以设置调用开始,结束时间,优先级
var trigger = TriggerBuilder.Create().WithSimpleSchedule(
m => m.WithIntervalInSeconds(1).WithRepeatCount(1))
.StartNow()//.EndAt(DateTimeOffset.Now.AddSeconds(10))
.Build(); scheduler.ScheduleJob(job, trigger);
 
它有两个核心要素:Job和Trigger,Job用于通过实现了IJob接口的泛型即PublishJob告诉框架做什么,而Trigger告诉框架何时做。
 
MyJob类:
    /// <summary>
/// 自定义任务
/// </summary>
public class MyJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//实现具体的业务逻辑
}
}
 
Job常用方法
UsingJobData(key, value)方法
通过这个方法可以给具体的任务实现类即上面的MyJob传值,例如: context.JobDetail.JobDataMap["count"]
 
WithDescription(description)方法
用于描述Job的名称,业务逻辑,我一开始还很奇怪任务的名称和业务逻辑完全可以在代码中描述,为何还要有这个方法,原来这个方法的使用场景是:自定义定时任务框架,比如开发一套类似于Windows定时任务的工具。
 
WithIdentity(name)
给JobKey命名,JobKey是JobBuilder的一个属性,它的底层代码如下:

    public JobBuilder WithIdentity(string name)
{
//new一个JobKey,name是key的名称,group名称是null
key = new JobKey(name, null);
return this;
}
 
StoreDurably(durability)
是否持久化(默认当没有Trigger指向Job时,Job会被删掉)
 
SetJobData(newJobDataMap)
给JobDataMap设置一个新的对象,这个方法与上面的UsingJobData方法区别在于一个是给JobDataMap添加值,一个是重新给这个对象赋值,它们的底层代码如下。
 
SetJobData:

        public JobBuilder SetJobData(JobDataMap newJobDataMap)
{
jobDataMap = newJobDataMap;
return this;
}
UsingJobData:

        public JobBuilder UsingJobData(string key, string value)
{
jobDataMap.Put(key, value);
return this;
}
 
Trigger常用方法
StartAt(startTimeUtc) 方法
设置触发器开始执行的时间,这个参数是可以设置时区的。
 
Quartz.NET框架自身还封装了一个日期工具类DateBuilder,它实现类很多返回下一分钟(小时,天等)方法,它与StartAt能够很好地配合。
例如:
DateBuilder.EvenMinuteDateAfterNow(); 返回现在时刻地下一分钟,例如:现在的时间是12点29分20秒,它会返回12点30分00秒
 
EndAt(endTimeUtc) 方法
与StartAt对应的是EndAt方法,它用于设置触发器的关闭时间
 
WithSimpleSchedule(action) 方法
创建了一个简单的执行计划,可以设置执行次数,频率等,这个方法是最常用的,我们熟悉的Timer定时器就类似于这个。
它的参数是一个委托Action<SimpleScheduleBuilder>,我们就是通过调用SimpleScheduleBuilder的方法来设置执行次数&间隔时间的。
 
WithDailyTimeIntervalSchedule(action) 方法
创建一个功能更强的执行计划,它可以设置每天几点到几点执行,工作日执行或只在周末执行,在执行了几次后停止,在某一个星期执行,设置执行频率等。
它的参数是一个委托Action<DailyTimeIntervalScheduleBuilder>,我们就是通过调用DailyTimeIntervalScheduleBuilder的方法来设置执行策略的。
 
WithCronSchedule(cronExpression)方法
通过Corn表达式来设置执行计划,这种方式与上面两种的优点在于我们可以不再通过硬编码的方式来设置执行策略,而是通过字符串来控制执行策略。
 
语法如下:

        //秒 分 时 天 月 年 周
//1. 天或者周必须有一个是?(?表示模糊)
//2. * 表示所有值即,秒位为*表示每秒执行一次
//3. - 表示范围,分钟位为10-12表示每个小时的10,11,12分执行一次
//4. , 表示每个值即,分钟位为10,20,30表示每个小时的10,20,30分执行一次
//5. / 表示递增,秒位为0/5表示0,5,10,15,20,25,30,35,40,45,50,55秒执行一次
//例子:
// * * * * * ? => 每秒执行一次
// 0/5 * * * * ? => 5s执行一次
// 0 * * * * ? => 1min执行一次
// 0 0 1 * * ? => 每个月1号执行一次
// 地址:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
 
 
 
 

Quartz.NET常用方法 01的更多相关文章

  1. 【Quartz】常用方法的使用方式(三)

    前言    总结了一下quartz组件的一些常用方法,以备将来不时之需.哈哈,看着挺简单有些好是值得笔记一下的.好记性不如烂笔头吗? 代码部分: 方法类内容: public class Example ...

  2. 【ios系列】-Quartz 2D常用方法介绍

    Quartz 2D基本介绍 Quartz 2D是一个二维绘图引擎 能够,绘制图形 : 线条\三角形\矩形\圆\弧等,绘制文字,绘制\生成图片(图像),读取\生成PDF,截图\裁剪图片,自定义UI控件( ...

  3. 实训第八天 有关python orm 的学习记录 常用方法01

    沿用第七天的数据库,数据库现在是这样的: 配置好主路由include子路由 子路由引入views 在views页面定义test测试请求如下: def test(request): # 1.all()方 ...

  4. Quartz.NET常用方法 02

    上一篇里介绍了Job和Trigger的常用方法,这一节将介绍Calendar,它的作用是排除特定的日期时间.   Calendar的常用类 DailyCalendar 排除每天某个时间段任务的执行 例 ...

  5. 【Quartz】1、Quartz使用说明

    简介 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还 ...

  6. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  7. 任务调度框架Quartz快速入门!

    目录 Quartz是什么 Quartz中的重要API及概念 超重要API 重要概念 Quartz设计理念:为什么设计Job和Trigger? 最简单的Quartz使用案例 Job实例和JobDetai ...

  8. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  9. S1java基础学习笔记

    第一章  Java基础 程序目标:减轻现实生活中一类人的工作量,提高工作效率. 学员最终可以书写系统: 超市管理系统,POS机系统等 入库单 销售单 01.课程重点 五大重点: 01.分支(选择)结构 ...

随机推荐

  1. DMA(Direct Memory Access直接存储器访问)总结

    转载于http://blog.csdn.net/peasant_lee/article/details/5594753 DMA一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,不需要CP ...

  2. TensorFlow学习笔记0-安装TensorFlow环境

    TensorFlow学习笔记0-安装TensorFlow环境 作者: YunYuan 转载请注明来源,谢谢! 写在前面 系统: Windows Enterprise 10 x64 CPU:Intel( ...

  3. USACO3.3 A Game【区间dp】

    这道题也是一道非常有意思的区间$dp$,和在纪中的这道题有点像:取数游戏 (除了取数规则其它好像都一样诶) 当时在纪中的时候就觉得这个$dp$非常不好想,状态定义都不是很容易想到. 但是做过一道这种题 ...

  4. 【VS开发】【图像处理】V4L2 pixel format

    目录(?)[-] v4l2_pix_format定义 2 具体Pixel Format定义 1. v4l2_pix_format定义 [cpp] view plain copy /* *  V I D ...

  5. ios系统App Store安装包下载链接获取

    今天将自己开发的Android版本和ios版本的安装包通过生成二维码的方式展示在H5页面上,Android版的比较简单,但是ios的安装包用户必须从App Store(苹果应用市场)中下载安装,所以获 ...

  6. hive查询结果保存

    参考: https://blog.csdn.net/zhuce1986/article/details/39586189 一.保存结果到本地 方法1:调用hive标准输出,将查询结果写到指定的文件中 ...

  7. Spring MVC 中使用AOP 进行统一日志管理--XML配置实现

    1.介绍 上一篇博客写了使用AOP进行统一日志管理的注解版实现,今天写一下使用XML配置实现版本,与上篇不同的是上次我们记录的Controller层日志,这次我们记录的是Service层的日志.使用的 ...

  8. 【洛谷P1886】滑动窗口——单调队列

    没想到啊没想到,时隔两个月,我单调队列又懵了…… 调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!) 考前就不推新东西了,好好写写那些学过的东西 题目点这里(我就不粘了自己点一下 ...

  9. POJ 2492 A Bug's Life 题解

    题面 这道题是一道标准的种类并查集: 种类并查集是给每个结点一个权值.然后在合并和查找的时候根据情况对权值来进行维护. 通过将原有的区间范围变大使并查集可以维护种类的联系: #include < ...

  10. js 获取ip和城市

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>