2016-12-06 48 views
1

我正在用AnnotationConfigApplicationContext編寫一個簡單的彈簧應用程序。我在我的應用程序中有一個ConcurrentTaskScheduler。在春季關閉時停止ConcurrentTaskScheduler的最佳做法是什麼?當彈簧環境關閉時停止ConcurrentTaskScheduler

更新:主要問題是當Junit關閉@After註釋中的上下文時,所有線程都將被終止,但是當我在應用程序結束時手動關閉上下文時,運行ConcurrentTaskScheduler的某些線程將繼續運行。

回答

1

讓Spring處理關機本身。

將ScheduledExecutorService傳遞給您的ConcurrentTaskScheduler。
比在其中關閉ScheduledExecutorService的情況下添加一個帶有@PreDestroy註釋的方法。

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

謝謝,ConcurrentTaskScheduler有兩個提到的方法? – Amir

+0

哦,我真的很抱歉,雖然你問了ThreadPoolTask​​Executor。我更新了ConcurrentTaskScheduler的答案 –