1 核心概念

1.1    核心元素

(1)Scheduler

任务调度器,是Quartz框架的核心,负责管理其他组件。

(2)Trigger

  触发器,用于定义任务调度的时间规则,有SimpleTrigger、CronTrigger、DateIntervalTrigger和NthIncludedDayTrigger。

trigger还有一个重要的属性misfire;如果scheduler关闭了,或者Quartz线程池中没有可用的线程来执行job,此时持久性的trigger就会错过(miss)其触发时间,即错过触发(misfire)。不同类型的trigger,有不同的misfire机制。它们默认都使用“智能机制(smart policy)”,即根据trigger的类型和配置动态调整行为。当scheduler启动的时候,查询所有错过触发(misfire)的持久性trigger,然后根据它们各自的misfire机制更新trigger的信息。

(3)Job

任务,即要被执行的任务。作业是一个执行任务的简单Java类,只需你实现org.quartz.Job接口并且在出现严重错误情况下抛出JobExecutionException异常即可。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。

Job接口包含唯一的一个方法execute(),作业从这里开始执行。一旦实现了Job接口和execute()方法,当Quartz确定该是作业运行的时候,它将调用你的作业。Execute()方法内就完全是你要做的事情。

主要有两种类型的 job:无状态的(stateless)和有状态的(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。有状态作业在每次执行时只有一个实例,每次执行时会查看JobDataMap的状态改变。Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。

2 数据存储

  作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数。Quartz通过一个称之为作业存储(JobStore)的概念来做作业存储和管理。   Quartz 中有两种存储方式:

(1)RAMJobStore

  使用内存来持久化调度程序信息。优点是容易配置、构造和运行。缺点是当应用程序停止运行时,所有调度信息将被丢失。

(2)JobStoreSupport

  通过JDBC存储数据到数据库中。quartz集群是通过数据库表来感知其他的应用的,各个节点之间并没有直接的通信。只有使用持久的JobStore才能完成Quartz集群。有两种类型:

· JobStoreTX:自己控制事务时使用

· JobStoreCMT:容器控制事务时使用

数据库表有:

Table name

Description

QRTZ_CALENDARS

存储Quartz的Calendar信息

QRTZ_CRON_TRIGGERS

存储CronTrigger,包括Cron表达式和时区信息

QRTZ_FIRED_TRIGGERS

存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息

QRTZ_PAUSED_TRIGGER_GRPS

存储已暂停的Trigger组的信息

QRTZ_SCHEDULER_STATE

存储少量的有关Scheduler的状态信息,和别的Scheduler实例

QRTZ_LOCKS

存储程序的悲观锁的信息

QRTZ_JOB_DETAILS

存储每一个已配置的Job的详细信息

QRTZ_SIMPLE_TRIGGERS

存储简单的Trigger,包括重复次数、间隔、以及已触的次数

QRTZ_BLOG_TRIGGERS

Trigger作为Blob类型存储

QRTZ_TRIGGERS

存储已配置的Trigger的信息

QRTZ_SIMPROP_TRIGGERS

  

  本文也参考了https://blog.csdn.net/lkl_csdn/article/details/73613033和https://blog.csdn.net/guolong1983811/article/details/51501346,谢谢两位作者。

最新文章

  1. angular的路由
  2. 国庆送干货——前端建站实用UI工具vajoyJS
  3. LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy
  4. django 模板中url的处理
  5. [ JS 进阶 ] test, exec, match, replace
  6. PIVOT 用于将列值旋转为列名
  7. 转: ASP.NET+ExtJs4.0+表单提交submit,上传图片到服务器
  8. [转] gc tips(3)
  9. MyBatis(3.2.3) - One-to-one mapping using nested Select
  10. 数据视化Echarts+百度地图API实现市县区级下钻
  11. Hex Workshop(16进制编辑利器) 6.7.2绿色版
  12. Sphinx安装流程及配合PHP使用经验
  13. box-sizing怪异盒子模型在移动端应用
  14. GC对象分配规则
  15. 第一册:lesson seventeen。
  16. WPF 模拟UI 键盘录入
  17. 【剑指offer】最小的K个数
  18. task optimization
  19. Android - Style问题
  20. MyBatis——日志

热门文章

  1. 初次使用Xcode遇到的问题及解决方法
  2. numpy中三维数组转变成二维数组
  3. 团队作业7——alpha阶段之事后诸葛亮分析
  4. 懒人的ERP开发框架--2B&苦B程序员专用
  5. mysql5.7文件无法导入数据库的解决方案
  6. input中的disabled、readonly和hidden
  7. win7更改路由器wifi 密码
  8. 20169221 2016——2017《网络攻防》SQL注入
  9. ZOJ3704 I am Nexus Master! 2017-04-06 23:36 56人阅读 评论(0) 收藏
  10. 浅析互联网系统和传统企业IT系统的异同