我正在阅读关于日程安排的Spring 3.0 doc。我倾向于Spring的JobDetailBean for Quartz。但是, @Scheduled 注释引起了我的注意。看来这是使用Spring Framework调度任务的另一种方式。基于文档,Spring提供了三种调度方式:
我对JDK Timer没兴趣。我为什么要选择@Scheduled而不是Quartz? (当我提到Quartz时,我的意思是使用Spring的bean包装器进行Quartz)。
假设我的用例非常复杂,我将与第三方Web服务进行通信,以便按指定的时间间隔导入和导出数据。
答案 0 :(得分:30)
Quartz比Spring内置的调度程序复杂一个数量级,包括对持久,事务和分布式作业的支持。尽管如此,即使使用Spring的API支持,它也有点像猪。
如果您需要的是每隔X秒或在cron时间表上对bean执行方法,那么@Scheduled
(或Spring的<task>
config schema中的各种选项)可能就足够了
答案 1 :(得分:9)
我必须说明我在使用@Scheduled
与Quartz
作为Spring应用程序中的调度实现时的经验。
计划作业具有以下要求:
因此,我们必须尝试使用Quartz实现(版本2.2.3)以支持数据库中作业的持久性。一些基本结论如下:
JobListener
和TriggerListener
在主数据库中维护一些有用的(以及更多面向用户的)有关用户定义的预定作业的信息。答案 2 :(得分:0)
在Spring中,您可以使用FixedRate,FixedDelay和cron安排任务。但是大多数计划作业需要动态处理执行时间。因此,在这种情况下,最好使用Quartz,因为它提供了将预定作业存储在DBJobstore和RAMJobstore中的选项。
答案 3 :(得分:0)
我们可以使用@Scheduler中不存在的一些更复杂的功能。 例如:
scheduler.standby();
,然后与scheduler.start();
重新安排。scheduler.shutdown(true);
和scheduler.shutdown(false);
JobDetail job1 =newJob(MyJobClass.class). withIdentity("job1","group1"). storeDurably(). build();
JobDetail job1 = newJob(MyJobClass.class). withIdentity("job1", "group1"). build();