quartz详解1:初步了解quartz
2017-11-30 15:45
218 查看
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应用是通过数据库表来感知到另一应用。
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、 灵活支持各种自定义任务,扩展方便
一、引入
你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上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应用是通过数据库表来感知到另一应用。
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详解1:初步了解quartz?
- quartz详解1:初步了解quartz
- quartz详解1:初步了解quartz
- quartz及其集群的初步了解和使用
- Android的Notification应用详解和PendingIntent的初步剖解
- 学习总结 初步了解HTML课程
- 初步了解Shuttle ESB
- uCOS整体初步了解
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- MVC详解:了解真正所谓的"框架"
- JavaScript初步了解
- C#socket类初步了解(客户端与服务端的建立)
- Quartz学习——Spring和Quartz集成详解(三)
- 对C语言内存对齐的初步了解
- 教你初步了解KMP算法
- hbase详解-----终于了解了
- Linux环境下的C/C++基础调试技术1——初步了解
- MVC详解:了解真正所谓的"框架"
- json2.js的初步学习与了解(转)