1

Spring Framework アプリケーションに複数の QuartzJobBean があります。これらのジョブは、必要に応じてスケジュールされます。次のような問題があります。

ジョブは 5 秒ごとに起動します。

まあ言ってみれば;

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

ただし、1 回目の実行が 6 秒間続いた場合、2 回目の実行は最初の実行の完了直後に行われます。可能であれば、次のようにジョブをスケジュールしたいですか?

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を使用しました。

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

作業が完了したときにジョブ自体のスケジュールを変更することで、これを行うことができます。

ジョブが予期せず終了した場合、スケジュール変更が行われない可能性があることに注意する必要があります。

たとえば、リスナーを介してそれを行うことができます:クォーツジョブリスナー

于 2013-01-10T16:05:11.950 に答える