Spring Scheduling:@Scheduled vs Quartz

chr*_*ris 41 java spring scheduling quartz-scheduler

我正在阅读关于调度的Spring 3.0文档.我倾向于Spring的JobDetailBean for Quartz.但是@Scheduled注释引起了我的注意.看来这是使用Spring Framework调度任务的另一种方式.基于文档,Spring提供了三种调度方式:

  1. @Scheduled
  2. 通过石英
  3. 通过JDK Timer

我对JDK Timer没兴趣.我为什么要选择@Scheduled而不是Quartz?(当我提到Quartz时,我的意思是使用Spring的bean包装器进行Quartz).

假设我的用例非常复杂,我将与第三方Web服务进行通信,以便按指定的时间间隔导入和导出数据.

ska*_*man 32

Quartz比Spring的内置调度程序复杂一个数量级,包括对持久,事务和分布式作业的支持.尽管如此,即使使用Spring的API支持,它也有点像猪.

如果您需要的是每隔X秒或在cron调度上对bean执行方法,那么@Scheduled(或Spring的<task>配置模式中的各种选项)可能就足够了

  • "它是[石英]有点像猪" - 它是2年后,我正在做与@chris相同的比较.Quartz仍然难以通过Spring使用吗? (7认同)
  • @Scheduled是否支持CLUSTER?如果是,那我该怎么做呢? (5认同)
  • 不,@ Scheduled不支持集群或多节点环境,这似乎是它的唯一主要限制,也是许多人仍然使用Quartz的主要原因。 (2认同)
  • 我在Spring的包装纸上使用了石英,并为我们公司开发了一个调度程序模块。我发现这是一个不错的选择。带有弹簧的石英并不复杂。它在集群环境中完美运行。我们没有发现任何问题。 (2认同)
  • Khalid Saleem的好文章 - http://khalidsaleem.blogspot.in/2015/03/quartz-scheduler-vs-spring-scheduler.html.基本上,Spring Scheduler(Spring 3.0+)是一个真正轻量级的实现,足以满足简单的调度需求,并且它为Task Scheduling和Asynchronous方法执行提供了注释支持.它支持固定速率和延迟以及基于cron的调度.但是,Quartz为JTA和集群等企业级功能提供支持; 它带有JobPersistence(JDBC和RAM存储),可用于故障安全和负载平衡目的. (2认同)

lza*_*tos 10

我必须说明我自己在Spring应用程序中使用@Scheduledvs Quartz作为调度实现的经验.

调度作业具有以下要求:

  • 最终用户应该能够保存和安排(定义执行时间)他们自己的任务
  • 服务器停机期间的计划作业不应从作业队列中省略

因此,我们必须尝试使用​​Quartz实现(版本2.2.3)以支持数据库中作业的持久性.一些基本结论如下:

  • 使用quartz.properties文件与Spring 4 MVC应用程序集成并不困难.
  • 我们能够选择第二个数据库来存储主数据库中的作业.
  • 只要服务器启动,服务器停机期间安排的作业就会开始运行.
  • 作为奖励,我们设法在主数据库中维护一些有用的(以及更多面向用户的)有关用户定义的预定作业的信息,使用自定义JobListenerTriggerListener.
  • Quartz是一个非常有用的库,适用于具有更复杂调度要求的应用程序.