2014-01-13 205 views
0

我們使用交換服務器獲取電子郵件並打開連接30分鐘,然後在30分鐘後自動重新打開它。但是當我們想要部署新的war文件並停止tomcat服務時,連接期間不會結束(30分鐘),連接不會關閉。所以tomcat服務在這段時間內無法啓動。 我試圖處理服務器關閉掛鉤停止這樣處理tomcat停止

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){ 
     public void run() { 
      connection.close(); 
     } 
    })); 

,但它不工作。 是否有另一種方法來關閉連接?

與交換服務器的連接處於新線程中。 Tomcat 7.

此外,我們想以任何方式處理(關閉連接)停止tomcat。

P.S.對不起我的英語不好。

更新:我發現bean的destroy方法執行,但連接在1-2分鐘後關閉。網站仍然太長。

回答

0

如果你殺了java proccess關機掛鉤將無法正常工作。因此 - 你不能以某種常見的方式處理這種情況。

但是,想想停止服務器時關閉連接的原因是什麼? 服務器死亡時哪些資源保持打開狀態?

我們有2個選項。

  1. 要關閉的資源是JVM對象。當你殺死JVM時 - 那個對象會死掉。這裏什麼都不關閉。
  2. 你想關閉的資源是持久的東西。那麼 - 爲什麼你想關閉它?只需重新使用新的部署。
+0

Thx爲您的答覆。 Tomcat不會停止的問題,我不能在不殺死進程的情況下部署新的war文件。我如何重用它? –

+0

哦,現在就明白了。在這種情況下,關機鉤不會幫助你,因爲它不知道tomcat關機發生。在這種情況下關閉是servlet特定的實體。你可以寫** **的ServletContextListener http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html – Boris

+0

THX你的答案,但現在我有一個問題:連接被關閉太長。大約1-2分鐘。這是一個漫長的網站。 –

0

如果您的Tomcat不停止,可能還有另一個永無止境的線程仍然活着。所以你應該在關閉鉤子中先停止該線程。

我相信使用ServletContextListener比「addShutdownHook」更好。

+0

THX你的答案,但現在我有一個問題:。連接關閉時間過長約1-2分鐘這對網站太長時間的休息。 –