1. 介绍
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是彻底由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先肯定(被归入日程)的时间到达时,负责执行(或者通知)其余软件组件的系统。
Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了全部Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操做,例如:将任务归入日程或者从日程中取消,开始/中止/暂停日程进度。
2. 定时器种类
Quartz 中五种类型的 Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar 类( org.quartz.Calendar)。
最经常使用的:
SimpleTrigger:用来触发只需执行一次或者在给定时间触发而且重复N次且每次执行延迟必定时间的任务。
CronTrigger:按照日历触发,例如“每一个周五”,每月10日中午或者10:15分。
3. 存储方式
RAMJobStore和JDBCJobStore
对比:java
类型 | 优势 | 缺点 |
---|---|---|
RAMJobStore | 不要外部数据库,配置容易,运行速度快 | 由于调度程序信息是存储在被分配给JVM的内存里面,因此,当应用程序中止运行时,全部调度信息将被丢失。另外由于存储到JVM内存里面,因此能够存储多少个Job和Trigger将会受到限制 |
JDBCJobStore | 支持集群,由于全部的任务信息都会保存到数据库中,能够控制事物,还有就是若是应用服务器关闭或者重启,任务信息都不会丢失,而且能够恢复因服务器关闭或者重启而致使执行失败的任务 | 运行速度的快慢取决与链接数据库的快慢 |
4. 表关系和解释mysql
表关系sql
解释数据库
表名称 | 说明 |
---|---|
qrtz_blob_triggers | Trigger做为Blob类型存储(用于Quartz用户用JDBC建立他们本身定制的Trigger类型,JobStore 并不知道如何存储实例的时候) |
qrtz_calendars | 以Blob类型存储Quartz的Calendar日历信息, quartz可配置一个日从来指定一个时间范围 |
qrtz_cron_triggers | 存储Cron Trigger,包括Cron表达式和时区信息。 |
qrtz_fired_triggers | 存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息 |
qrtz_job_details | 存储每个已配置的Job的详细信息 |
qrtz_locks | 存储程序的非观锁的信息(假如使用了悲观锁) |
qrtz_paused_trigger_graps | 存储已暂停的Trigger组的信息 |
qrtz_scheduler_state | 存储少许的有关 Scheduler的状态信息,和别的 Scheduler 实例(假如是用于一个集群中) |
qrtz_simple_triggers | 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数 |
qrtz_triggers | 存储已配置的 Trigger的信息 |
qrzt_simprop_triggers |
5. 核心类和关系服务器
5. 核心类和关系并发
一个job能够被多个Trigger 绑定,可是一个Trigger只能绑定一个job!源码分析
6. 配置文件
quartz.properties
//调度标识名 集群中每个实例都必须使用相同的名称 (区分特定的调度器实例)
org.quartz.scheduler.instanceName:DefaultQuartzScheduler
//ID设置为自动获取 每个必须不一样 (全部调度器实例中是惟一的)
org.quartz.scheduler.instanceId :AUTO
//数据保存方式为持久化
org.quartz.jobStore.class :org.quartz.impl.jdbcjobstore.JobStoreTX
//表的前缀
org.quartz.jobStore.tablePrefix : QRTZ_
//设置为TRUE不会出现序列化非字符串类到 BLOB 时产生的类版本问题
//org.quartz.jobStore.useProperties : true
//加入集群 true 为集群 false不是集群
org.quartz.jobStore.isClustered : false
//调度实例失效的检查时间间隔
org.quartz.jobStore.clusterCheckinInterval:20000
//允许的最大做业延长时间
org.quartz.jobStore.misfireThreshold :60000
//ThreadPool 实现的类名
org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool
//线程数量
org.quartz.threadPool.threadCount : 10
//线程优先级
org.quartz.threadPool.threadPriority : 5(threadPriority 属性的最大值是常量 java.lang.Thread.MAX_PRIORITY,等于10。最小值为常量 java.lang.Thread.MIN_PRIORITY,为1)
//自建立父线程
//org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
//数据库别名
org.quartz.jobStore.dataSource : qzDS
//设置数据源
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:123456
org.quartz.dataSource.qzDS.maxConnection:10ui
7.JDBC插入表顺序spa
主要的JDBC操做类,执行sql顺序。
Simple_trigger :插入顺序
qrtz_job_details —> qrtz_triggers —> qrtz_simple_triggers
qrtz_fired_triggers
Cron_Trigger:插入顺序
qrtz_job_details —> qrtz_triggers —> qrtz_cron_triggers
qrtz_fired_triggers.net
8.参考文章
官网: http://www.quartz-scheduler.org/
深刻解读Quartz的原理 :http://lavasoft.blog.51cto.com/62575/181907/
基于 Quartz 开发企业级任务调度应用 :http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/
quartz 数据库表含义解释 :http://blog.csdn.net/tengdazhang770960436/article/details/51019291
Quartz源码分析: https://my.oschina.net/chengxiaoyuan/blog/664833
http://blog.csdn.net/u010648555/article/category/6601767
原文地址:http://blog.csdn.net/u010648555/article/details/54863144