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

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

  1. 任务每天0200时运行一次。
  2. 任务将在凌晨4点运行一次
  3. 从0003小时开始以15分钟的间隔运行任务
  4. 从0005时开始以15分钟的间隔运行任务

使用普通java.util.timer Vs有什么优缺点。 石英这个?

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

石英

  • 额外的依赖
  • API目前(2011年末)正在发生变化:1.x正在走出去,但是唯一受Spring支持的可能还有其他人
  • 工作可以持久存储; 可以对多个调度程序进行集群以实现负载平衡和故障转移
  • Job和Trigger之间的区别有点习惯 – 但它有可能
  • 更强大的重复调度表达式(例如用于cron表达式的CronTrigger)

计时器

  • 配备JSE 1.3+开箱即用
  • 对于你的function可能足够了
  • 灵活性较差,但也不那么复杂

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

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

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

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