使用java.util.timer与Quartz进行调度的优缺点?

时间:2011-11-10 10:31:49

标签: java timer scheduled-tasks scheduling quartz-scheduler

我必须编写一个执行一系列任务的应用程序:

  1. 每天0200时运行一次任务。
  2. 任务将于每天0400时运行一次
  3. 从0003时开始以15分钟的间隔运行任务
  4. 从0005时开始以15分钟的间隔运行任务
  5. 使用普通java.util.timer Vs有什么优缺点。 Quartz for this?

    我还应该考虑其他替代方案吗?

3 个答案:

答案 0 :(得分:10)

石英

  • 附加依赖
  • API目前(2011年末)发生变化:1.x正在逐渐退出,但唯一受Spring支持的可能还有其他人
  • 可以持久存储作业;可以对多个调度程序进行集群以实现负载平衡和故障转移
  • Job和Trigger之间的区别需要一点时间来适应 - 但有可能
  • 更强大的重复调度表达式(例如cronTrigger for cron表达式)

定时器

  • 开箱即用JSE 1.3+
  • 对于您的功能可能
  • 不太灵活,但也不那么复杂

我个人使用Quartz +持久存储用于Web应用程序,其中触发器可以交互式创建,并且应该使用Spring's scheduling abstraction重新启动。两种API恕我直言都缺乏一个重要的概念:在一段时间后重试失败的任务。为自己添加这个对于重复任务也是一种痛苦,应该重试。

答案 1 :(得分:1)

首先,Quartz更具扩展性。当你创建一个像cron一样的工作需求时,quartz就已经得到了支持。 应用程序使用的线程也由quartz管理,因此您不必启动自己的线程。这很好,这是由Quartz Scheduler处理的。 它还与弹簧框架集成(不知道是否适用于您的情况)。 Quartz拥有合理的文档,并得到社区的支持。

不知道java.util.Timer是否真的在企业环境中使用,但这取决于您的应用程序。

答案 2 :(得分:1)

更新:现在(2014年)随着Java 1.6,1.7的内置java调度程序的出现......我认为石英不是一个选择。