2016-12-06 3 views
1

AnnotationConfigApplicationContextで単純なスプリングアプリケーションを作成しています。私のアプリケーションにConcurrentTaskSchedulerがあります。スプリングコンテキストが閉じたときにConcurrentTaskSchedulerを停止するベストプラクティスは何ですか?Springコンテキストが閉じられたときにConcurrentTaskSchedulerを停止する

アップデート:主な問題は、@Afterアノテーションでコンテキストを閉じると主な問題です。すべてのスレッドは終了しますが、アプリケーション終了時に手動でコンテキストを閉じると、ConcurrentTaskSchedulerで実行中のスレッドが実行を継続します。

答えて

1

春がシャットダウン自体を処理してみましょう。

ConcurrentTaskSchedulerにScheduledExecutorServiceを渡します。
アノテーション@PreDestroyを持つメソッドを追加すると、ScheduledExecutorServiceをシャットダウンします。

@PreDestroy 
    public void cleanUp() throws InterruptedException { 
     scheduleExecutorService.shutdown(); 
     try { 
      scheduleExecutorService.awaitTermination(10000, TimeUnit.MILLISECONDS); 
     } catch (InterruptedException e) { 
      scheduleExecutorService.shutdownNow(); 
      throw e; 
     } 
    } 
+0

おかげで、ConcurrentTaskSchedulerは2言及したメソッドを持っていることをやっていけませんか? – Amir

+0

ああ、あなたがThreadPoolTask​​Executorを求めても、本当にすみません。 ConcurrentTaskSchedulerの回答を更新しました。 –

0

私は自分のプロジェクトで何をしているのですか?私はデータベースにジョブを保存するので、私はそれを制御できるので、将来はその情報を取得して停止できます。

How to manage/stop spring 4 ConcurrentTaskScheduler

+0

おかげで、しかし、私は – Amir

関連する問題