2012-10-02 10 views
6

を使用してスケジュールされたジョブを停止するにはどうすれば次のように春のタスク

<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"/> 

が、私はこのスケジュール方法をどのように停止することができ、ApplicationContextの持つサンプルスプリングスケジュールされたタスクを、実施していますか?

答えて

3

ThreadPoolTaskSchedulerを別のBeanに注入し、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()に電話することです。

+0

うーん、あなたは)私に私taksは(メソッドのショーのスケジュールを停止される例示的な方法を記述してもらえますか? – witek010

+0

@ user1579075:done。 –

+0

OK、どうすればスケジューラからジョブを削除できますか?私はaxampleを与えることができますか? – witek010

1

「停止」の意味によって異なります。

  1. ビジネスコンディションストップ: ストップビジネス条件の結果として、あなたはそれらの条件は、あなたの方法で評価があり、単にコードを実行するべきではありません。このようにして、実行時に望ましくない実行を停止し、その結果として条件の失敗(ロギング、通知など)を処理するロジックを実行できます。

  2. 非ビジネス条件:私は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']}"/> 

関連する問題