2016-05-27 11 views
2

@Scheduledアノテーションを使用してスプリングスケジューラを使用して、ファイル生成サービスを実行するジョブをスケジュールしています。アプリケーションは、ロードバランシングとフェイルオーバーのためにクラスタ環境のtomcatの5つの別個のノードに配置されます。このため、サービスは5回予定されており、決して予想されません。 スケジューラを現在のノードでのみ実行するように設定する方法はありますか?クラスタ環境のスプリングスケジューラ

別のアプローチを、現在生きているノードを把握するためにデータベースを使用し、その特定のインスタンスのためのスケジューラを起動here

アプローチは、私はに大きな変更を加えることができませんでしたのでquartz scheduler

を使用することがありますされます問題を解決する簡単な方法はありますか?お知らせ下さい。

+0

を実行したときにロックされなければならないタスクに注釈を付けますか? – Jan

+0

あなたの質問には解決策が見つかりましたか? :) –

+0

可能な複製 "http://stackoverflow.com/questions/31288810/spring-scheduled-task-running-in-clustered-environment" – Harshil

答えて

2

ShedLockプロジェクトを使用することができます。あなたはただ、その後作るためにOKだろうどのような変更

@Scheduled(...) 
@SchedulerLock(name = "scheduledTaskName") 
public void scheduledTask() { 
    // do something 
} 

設定春とLockProvider(SQLおよび現在サポートされているモンゴ)

@Bean 
public TaskScheduler taskScheduler(LockProvider lockProvider) { 
    return SpringLockableTaskSchedulerFactory 
      .newLockableTaskScheduler(poolSize, lockProvider); 
} 
+0

ねえ、私の質問を見てみることができますかhttps://stackoverflow.com/questions/45561558/shedlock-running -multiple-instances-runs-scheduler-tasks-multiple-times – varunkr

関連する問題