任务调度(Quartz.net)定时或定期执行任务的一套框架。 可以通过配置文件来完成作业调度。
1.Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即系统因故障关闭,任务调度现场数据不会丢失。还提供了组件式的侦听器,各种插件,线程池等功能。
2.StdSchedulerFactory是SchedulerFactory接口的一个实现。通过调用工厂的getScheduler()可以产生一个scheduler()调度程序,初始化,并返回一个公共的接口。
3.Scheduler 调度器
4.Job 任务对象
有2种类型,一种是无状态的(可以并发的任务,任务之间是独立的,互不干扰),一种是有状态的(不能被并行执行,只有上一次触发的任务被执行完成之后,才能触发下一次执行。)
(1)JobDetail -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.
WithIdentity(m.JobName, m.JobGroup) ,是给作业调度加入组,和名称,方便我们针对哪一个作业计划,进行启动停止等操作
(2)JobDataMap -- JobDataMap用来报错由JobDetail传递过来的任务实例对象
JobDetail类中有requestsRecovery属性,默认是false,当设置为true时,重新提交之后Quartz会检测当前的任务时候错过了应该触发的时间,如果错过了会立即 触发一个任务。
在系统启动的时候,启动quartz,quartz就会从数据库里恢复之前持久化的任务信息,错过触发时间,trigger有一系列的应对策略,这里在声明触发器的时候要 设置好,如trigger.setMisfireInstruction(Trigger.INSTRUCTION_RE_EXECUTE_JOB);
5.Tigger 触发器(3种)
(1)SimpleTrigger 简单的在某一时刻重复执行多少次。 它有个起始和结束时间。
(2)NthIncludeDayTrigger 在每一年,月,周的第几天(Nth)执行作业。
(3)CronTrigger 使用Unix平台下的'cron-like'表达式来实现非常灵活的触发时间。
Cron表达式包括以下7个字段(1个可选)
秒 分 小时 月内日期 月 周内日期 年(可选)
表达式的每个数值域都是一个有最大值和最小值的集合。秒,分,小时字段都是从小到大排序的。
Calendars是排除时间段的。Calendar是能被序列化的任何对象。继承ICalendar。通过AddCalendar()初始化及注册。
AddExcludedDate()方法用来添加,以便在调度中排除。多个trigger可以使用同一个calendar实例。
同一时间内,Quart.Net就不会响应所有的触发。在这种情况下,就需要控制那些触发器,优先获得Quartz.NET 工作线程。
6.JobStore 作业存储 用来存储和管理作业
2种基本作业存储类型。(1)第一种类型是RAMJobStore,它是利用内存来持久化调度程序信息。这种作业存储类型最容易配置,构造和运行。Quartz.net缺省使用 的就是RAMJobStore。
(2)第二种是AdoJobStore。作业仓库通过ADO.NET把所有数据放在书架库中。这样数据持久化性的代价是性能降低和复杂性的提高。它将 所有的数据通过ADO.NET保存到数据库中。访问速度也没RAMJobStore快。要使用AdoJobStore,首先必须创建一套Quartz使用的数据库表,可以在Quartz的 database\tables找到创建库表的SQL脚本。如果没有找到你的数据库类型的脚本,那么找到一个已有的,修改成为你数据库所需要的。需要注意的一件事情就是所 有Quartz库表名都以QRTZ_作为前缀(例如:表"QRTZ_TRIGGERS",及"QRTZ_JOB_DETAIL")。你也可以将前缀设置成你想要的,只要告诉AdoJobStore就好,在配置 中设置。
7.Listener 监听器 Listeners是用来监听在调度作业有执行动作的对象。TriggerListeners用来接收和triggers相关的事件,JobListeners用来接收和作业有关系的事件.