Quartz作业调度完成

时间:2013-01-10 14:57:45

标签: spring quartz-scheduler

我在Spring Framework应用程序中有多个QuartzJobBean。这些工作根据他们的需要安排。我遇到如下问题。

每5秒开一次作业。

让我们说吧;

1st execution at 00.00.05
2nd execution at 00.00.10
3rd execution at 00.00.15
.
.
.
etc.

但是,如果第一次执行持续6秒,则在第一次执行完成后立即执行第二次。如果有可能,我想安排我的工作如下?

1st execution at 00.00.05 (execution time 6 seconds)
2nd execution at 00.00.16 (execution time 3 seconds)
3rd execution at 00.00.24 (execution time x seconds)
4th execution at 00.00.24+5+x 
.
.
.
etc.

提前致谢。

3 个答案:

答案 0 :(得分:2)

我最终扩展了QuartzJobBean并实现了StatefulJob。作为触发器,我使用了SimpleTriggerBean和repeatInterval属性xxxx毫秒。

MyJob类

public class MyJob extends QuartzJobBean implements StatefulJob

springcontext

<bean id="myJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="myJob"/>
    <property name="startDelay" value="0" />
    <property name="repeatInterval" value="2000" />
</bean>

答案 1 :(得分:0)

你可以通过让工作在完成工作时重新安排自己来做到这一点。

如果工作意外结束,您应该小心,可能不会重新安排。

你可以通过听众来做到这一点:quartz job listener

答案 2 :(得分:0)

实际上,如果您已经使用过Spring,那么根本不需要Quartz。引用25.5.1 The @Scheduled Annotation

  

25.5.1 @Scheduled Annotation

     

可以将@Scheduled注释与触发器元数据一起添加到方法中。例如,以固定延迟每5秒调用以下方法,这意味着将从每个前一次调用的完成时间开始测量周期。

@Scheduled(fixedDelay=5000)
public void doSomething() {
  // something that should execute periodically
}

文档中的示例似乎涵盖完全您想要的内容。