6

次のようにapplicationContextを使用して、サンプルの春のスケジュールされたタスクを実装しました。

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="cron" method="show" cron="0/10 * * * * ?"/>
    <task:scheduled ref="cron" method="show2" cron="0/15 * * * * ?"/>
</task:scheduled-tasks>

<task:scheduler id="myScheduler" pool-size="10"/>

このスケジュール方法を停止するにはどうすればよいですか?

4

2 に答える 2

3

を別の Bean に注入しThreadPoolTaskScheduler、 を呼び出しshutdown()ます。cronそれが受け入れられない場合は、フラグを受け入れるように Bean を構成できます。例えば:

public class Job() {
    private final AtomicBoolean stop = new AtomicBoolean(false);

    public void show() {
        if (stop.get()) {
            return;
        }
        ...
    }

    public void stop() {
        stop.set(true);
    }
}

これはスケジューラからジョブを削除しないことに注意してください。これを防ぐ唯一の方法は、ScheduledFutureおよび 呼び出しへの参照を取得することcancel()です。

于 2012-10-02T14:30:48.980 に答える
1

「やめる」の意味にもよります。

  1. ビジネス条件の停止: ビジネス条件 の結果として停止します。これらの条件をメソッドで評価し、単にコードを実行しないようにする必要があります。このようにして、実行時に不要な実行を停止し、ロジックを実行して条件の失敗 (ロギング、通知など) を結果として処理できます。

  2. 非ビジネス条件: chron 式をプロパティ ファイルに外部化するか、JVM のシステム変数を優先します。次に、プロパティ値を 9999 シナリオに変更して、実行を停止できます。

システム変数の例。

<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="cron" method="show" cron="#{systemProperties['chron1']}"/>
<task:scheduled ref="cron" method="show2" cron="#{systemProperties['chron2']}"/>

于 2012-10-02T14:38:31.843 に答える