2010-12-08 56 views
36

我在阅读有关日程安排的Spring 3.0 doc。我倾向于Spring的JobDetailBean Quartz。但是,注释引起了我的注意。看来这是使用Spring框架调度任务的另一种方式。根据该文件,Spring提供调度的三路:春季日程安排:@Scheduled与Quartz

  1. @Scheduled
  2. 通过石英
  3. 通过JDK定时器

我在JDK定时器没有兴趣。为什么我应该选择@Scheduled over Quartz? (当我提到Quartz时,我的意思是使用Spring的用于Quartz的bean包装器)。

假设我的用例足够复杂,我将与第三方Web服务通信以按指定的时间间隔导入和导出数据。

回答

28

石英比Spring内置的调度器复杂得多,包括支持持久性,事务性和分布式作业。尽管如此,即使Spring支持API,这也有点儿麻烦。

如果你需要的就是对一个bean的执行方法每隔X秒,或在cron的日程安排,然后@Scheduled(或Spring的<task> config schema的各种选项)大概够

+7

“这是[石英]有点猪” - 这是2年后,我正在做与@chris相同的比较。 Quartz仍然难以通过Spring使用? – Edward 2013-02-21 16:13:46

1

我必须声明我自己关于在Spring应用程序中使用@ScheduledQuartz作为调度实现的经验。

调度工作有以下要求:

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

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

  • 与Spring 4 MVC应用程序的集成使用quartz.properties文件并不困难。
  • 我们有能力选择第二个数据库来存储来自主数据库的作业。
  • 服务器停机时间计划的作业在服务器启动时开始运行。
  • 作为奖励,我们设法在主数据库中使用自定义JobListenerTriggerListener来保留有关用户定义的计划作业的一些有用(和更多用户导向)信息。
  • 在具有更复杂调度要求的应用程序中,Quartz是一个非常有用的库。