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. DN值

    DN值(Digital Number )是遥感影像像元亮度值,记录的地物的灰度值.无单位,是一个整数值,值大小与传感器的辐射分辨率.地物发射率.大气透过率和散射率等有关. 从DN值计算大气顶的反射率使 ...

  2. 事务与Mysql隔离级别

    事务 定义: 比如ABCD四个业务,作为一个事务,他们要么一起都执行完毕,要么都不执行.(只要有一个不成功,那么所有的都不可以成功) 四个特性 ACID 原子性(Atomicity) 整个事务中的所有 ...

  3. 实验吧-PHP大法-eregi()函数

    题目地址:http://www.shiyanbar.com/ctf/54 题目: <?php if(eregi("hackerDJ",$_GET[id])) { echo(& ...

  4. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

  5. MySQL 分组统计查询 表连接(3)

    1 查询底薪超过公司平均底薪的员工信息? select e.empno,e.ename,e.salfrom t_emp as e join (select avg(sal) as avg from t ...

  6. logging模块及日志框架

    logging模块及日志框架 logging模块 一.导入方式 import logging 二.作用 写日志 三.模块功能 3.1 经常使用 # V1 import logging logging ...

  7. 微信小程序与内嵌webview之间来回跳转的几点总结,以及二维码的使用

    截止到发稿小程序支持的功能,后续如果小程序更新在完善文稿. 1. 小程序可以内嵌组件跳转到h5页面,前提是在小程序后台配置相应的业务域名.新打开的h5页面会替代小程序组件内的其它组件,即为h5不能与小 ...

  8. 3D max导出的设置选项

    一3D max导出的设置选项

  9. java复习(1)面向对象

    一.面向对象的概念 ----------------------------------------------------- 1.理解面向对象:(1)面向对象是相对于面向过程的语言 (2)面向对象和 ...

  10. Fliter设置字符编码,解决中文问题

    class EncodingFilter implements FileFilter{ private String encoding; @Override public boolean accept ...