1

我在 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.

提前致谢。

4

3 回答 3

2

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

我的工作类

public class MyJob extends QuartzJobBean implements StatefulJob

弹簧上下文

<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>
于 2013-01-15T12:38:01.690 回答
0

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

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

例如,您可以通过侦听器来做到这一点:quartz job listener

于 2013-01-10T16:05:11.950 回答
0

实际上,如果您已经使用 Spring,则根本不需要 Quartz。引用25.5.1 @Scheduled 注释

25.5.1 @Scheduled 注解

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

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

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

于 2013-01-10T18:38:07.503 回答