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. jmeter业务建模中遇到的问题

    1.jmeter函数助手中的jexl3函数,不支持${__jexl3(15<${__Random(1,100,)}<36,)}这种写法,须这样写${__jexl3(15<${__Ra ...

  2. Markdown基础语法总结

    目录 区块元素 标题 列表 区块引用 代码区块 分隔线 段落和换行 区段元素 链接 强调 代码 图片 转义 标题 <a name="title"></a> ...

  3. 关于Eclipse及JDK安装过程中的一些问题

    一,环境变量的配置 1.配置CLASSPATH系统变量 CLASSPATH系统变量为类查找路径 ①.在使用javac进行编译时遇到import时候就会通过这个变量里面配置的路径去查找.如果配置的是目录 ...

  4. HTML笔记(一) 基础标签的介绍

    一个最基本的html文件,必须包含<html>, <head> 和<body> 三个标签 以及<!doctype>声明 1. <!DOCTYPE& ...

  5. ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题

    ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...

  6. spring boot-14.集成MyBatis

    1.如何使用注解版Mybatis? (1)引入mybatis ,druid,Mysql 的依赖,环境搭建可以参考第13篇的内容 <dependency> <groupId>or ...

  7. Luogu P1650 田忌赛马

    题目 如果我们最大比对面最大大,那么直接用. 如果我们最小比对面最小大,那么直接用. 否则用我们最小去换对面最大. #include<bits/stdc++.h> using namesp ...

  8. Tomcat 调优的技巧 (转)

    描述 最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下 ...

  9. Eclipse创建Maven多模块工程Module开发(图文教程)

    自己研究了下Eclipse用Maven多模块工程Module开发,跟大家分享一下! 功能模块来分Module,跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/ ...

  10. 推荐JavaScript动态效果库

    翻译:疯狂的技术宅,原文:https://blog.bitsrc.io/11-javascript-animation-libraries-for-2018-9d7ac93a2c59 当我想要在网上找 ...