quartz详解1:初步了解quartz
http://blog.itpub.NET/11627468/viewspace-1763389/
一、引入
你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用Java编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz调度器。
旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML文件。
二、为什么研发团队会选择quartz
- java编写的开源作业调度框架设计,用于J2SE和J2EE应用方便集成。
- 资历够老,创立于1998年,比struts1还早,而且一直在更新(24 Sept 2013: Quartz 2.2.1 Released),文档齐全。
- 设计清晰简单:核心概念scheduler,trigger,job,jobDetail,listener,calendar
- 支持集群:org.quartz.jobStore.isClustered 最重要的一点原因是quartz是支持集群的。不然JDK自带Timer就可以实现相同的功能。
- 支持任务恢复:requestsRecovery
- 普及面很广,JAVA开发人员比较熟悉。
- Apache2.0开源协议,允许代码修改,再商业发布。
关于quartz集群网上文章介绍很多,拿一张常见的图来说明。

- Quartz集群中的每个节点是一个独立的Quartz应用,它又管理其它的节点。
- 需要分别对每个节点分别启动或停止。不像应用服务器的集群,独立的Quartz节点并不与另一个节点或是管理节点通信。
- Quartz应用是通过数据库表来感知到另一应用。
- Quartz应用定时15秒同步一次心跳到数据库。
- Quartz通过数据库行锁来解决分布式环境下数据一致性问题。

Quartz官网: http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-11
问题:由于Quartz的集群基于对表进行行锁,Quartz内部的DB操作大量Trigger存在严重竞争问题,瞬间大量trigger执行。
答:目前只能通过(org.quartz.jobStore.tablePrefix = QRTZ)分表操作,存在长时间lock_wait(新版本据说有提高)。Quartz2.x已经支持可选节点执行job,需要测试spring最新版本是否支持Quartz的集成。
关于锁的机制,后续文章会对quartz源码进行分析。
四、如何使定时任务的开发方便,易于管理。
阿里开源项目easySchedule在quartz集群的基础上搭建了一个简单的管理平台。解决了可视化、易配置、统一监控告警功能。
实现调度与执行的分离,使任务不需要再去关注定时,只需要实现任务接口即可。
调度通过HTTP来调用执行任务。
easySchedule系统特点:
1、 Server和Client分别支持集群和分布式部署
2、 任务的执行与调度分离
3、 可视化管理所有任务
4、 任务状态持久化于DB
5、 完善的日志跟踪和告警策略
6、 任务支持异步调度
7、 灵活支持各种自定义任务,扩展方便
quartz详解1:初步了解quartz的更多相关文章
- quartz详解3:quartz数据库集群-锁机制
http://blog.itpub.NET/11627468/viewspace-1764753/ 一.quartz数据库锁 其中,QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表,其表结 ...
- quartz详解4:quartz线程管理
http://blog.itpub.NET/11627468/viewspace-1766967/ quartz启动后有多个线程同时在跑.启动时会启动主线程.集群线程.检漏线程.工作线程.主线程负责查 ...
- quartz详解2:quartz由浅入深
http://blog.itpub.net/11627468/viewspace-1763498/ 一.quartz核心概念 先来看一张图: scheduler 任务调度器 trigger 触 ...
- 转载:quartz详解:quartz由浅入深
转载网址:http://blog.itpub.net/11627468/viewspace-1763498/ 一.quartz核心概念 先来看一张图: scheduler 任务调度器 ...
- EventBus使用详解(一)——初步使用EventBus
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- SqlHelper 帮助文档及详解--项目初步搭建
微软SqlHelper类中文注释和使用方法 相关链接: http://blog.csdn.net/itmaxin/article/details/7609566 SqlHelper.cs是N年前微软出 ...
- quartz配置文件详解
quartz配置文件详解(转载) quartz学习总结: 一.关于job: 用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...
- quartz (从原理到应用)详解篇(转)
一.Quartz 基本介绍 1.1 Quartz 概述 1.2 Quartz特点 1.3 Quartz 集群配置 二.Quartz 原理及流程 2.1 quartz基本原理 2.2 quartz启动流 ...
- EventBus (一) 使用详解——初步使用EventBus
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言:EventBus是上周项目中用到的,网上的文章大都一样,或者过时,有用的没几篇,经过琢磨,请教他人,也终于弄清楚点眉目,记 ...
随机推荐
- 线程高级篇-Lock锁实现生产者-消费者模型
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- Eclipse创建一个普通maven项目详细步骤
首先找到Eclipse最顶部左边的File,new一个 Maven Project项目 下一步,勾选第二个即可 下一步,选择 maven-archetype-webapp Group Id 写域名倒 ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:字符编码与对象序列化
public class CharSetDemo01{ public static void main(String args[]){ System.out.println("系统默认编码: ...
- 最新获取 QQ头像 和 昵称接口
网上找来的测试可用... 获取QQ头像 http://q2.qlogo.cn/headimg_dl?bs=QQ号&dst_uin=QQ号&dst_uin=QQ号&;dst_ui ...
- 原生JS写表单验证提交功能
先上效果图: 表单的基础内容就是昵称判断.手机号判断.邮箱判断.身份证号码判断,这里是用到正则验证检验格式. 页面的表单写法就是一个form的提交.输入框用input来实现,输入内容用value来获取 ...
- EXTjs开发————优雅的用extjs写一个柱状图
简单的写法,extjs可以直接引用插件来写,这里将我发表在百度文库的文档简述下来,有兴趣也可以关注我的百度文库,ID:该用户已失踪. 主要部分的代码: $(document).ready(functi ...
- android中的简单animation(二)push up,push left,cross fade,hyperspace
animation_2.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- C中的文件操作函数[笔记]
头件 : #include<stdio.h> 两个必须函数: FILE * fopen(const char * path,const char * mode); //path:文件路径 ...
- java csv文件写入
List<String> list_code = null; 方案1 控制字符集: BufferedWriter bw=new BufferedWriter(new OutputStrea ...
- wincc的服务器-客户机模式具体做法(全抄-未测试)
一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...