存在的问题:实现步骤复杂,分散,任务调度不能恢复,严重依赖于srv23,回调URL时可能失败等情况。
CRM定时任务走过了很多弯路:
定时任务多种实现方式,使配置和代码分散在多处,难以维护和监控
任务执行过程没有保证,没有错误恢复
任务执行异常没有反馈(邮件)
没有集群支持
CRM需要分布式的任务调度框架,统一解决问题.
JA可以使用的任务调度框架:Quartz , Jcrontab , cron4j , taobao-pamirs-schedule
为什么选择Quartz:
1)资历够老,创立于1998年,比struts1还早,但是一直在更新(27 April 2012: Quartz 2.1.5 Released),文档齐全.
2)完全由Java写成,设计用于J2SE和J2EE应用.方便集成:JVM,RMI.
3)设计清晰简单:核心概念scheduler,trigger,job,jobDetail,listener,calendar
4)支持集群:org.quartz.jobStore.isClustered
5)支持任务恢复:requestsRecovery
从 获取最新Quartz
1)学习Quartz

图1 介绍了quartz关键的组件和简单流程
(1)Quartz 的目录结构和内容
docs/api Quartz 框架的JavaDoc Api 说明文档
docs/dbTables 创建 Quartz 的对象的脚本
docs/wikidocs Quartz 的帮助文件,点击 index.html 开始查看
Examples 多方面使用 Quartz 的例子Lib Quartz 使用到的第三方包
src/java/org/quartz 使用 Quartz 的客户端程序源代码,公有 API
src/java/org/quartz/core 使用 Quartz 的服务端程序源代码,私有 API
src/java/org/quartz/simpl Quartz 提供的不衣赖于第三方产品的简单实现
src/java/org/quartz/impl 依赖于第三方产品的支持模块的实现
src/java/org/quartz/utils 整个框架要用到的辅助类和工具组件
src/jboss 提供了特定于 JBoss 特性的源代码
src/oracle 提供了特定于 Oracle 特性的源代码
src/weblogic 提供了特定于 WebLogic 特性的源代码
Quartz 框架包含许多的类和接口,它们分布在大概 11 个包中。多数所要使用到的类或接口放置在 org.quartz 包中。这个包含盖了 Quartz 框架的公有 API.
(2)Quartz核心接口 Scheduler

图2
Scheduler 是 Quartz 的主要 API。与Quartz大部分交互是发生于 Scheduler 之上的。客服端与Scheduler 交互是通过org.quartz.Scheduler接口。
Scheduler的实现:对方法调用会传递到 QuartzScheduler 实例上。QuartzScheduler 对于客户端是不可见的,并且也不存在与此实例的直接交互。

图3
创建Scheduler
Quartz 框架提供了 org.quartz.SchedulerFactory 接口。
SchedulerFactory 实例就是用来产生 Scheduler 实例的。当 Scheduler 实例被创建之后,就会存到一个仓库中(org.quartz.impl.SchedulerRepository).
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29777-3.html
另外两个送给了我最重要的两个人