我有一個處理特定傳入請求的servlet。我們將其稱爲`UpdateUserStats'。我希望通話速度快,但我也需要請求執行相當昂貴的任務。我認爲如果讓UpdateUserStats servlet執行所有確定成功或失敗的工作,堅持新的狀態,然後爲後臺線程排隊一些工作以便立即處理並返回成功,這可能是一個很好的解決方案。Java,Tomcat,ServletContextListener和後臺線程
這看起來不錯,但我想知道如何處理關機。當服務器關閉時,我想確保它不會殺死後臺線程,直到沒有更多的工作。我正在考慮使用tomcat ServletContextListener來讓後臺線程知道服務器正在關閉,並且一旦隊列結束就退出了,但我不能100%確定這將會如何工作。請求contextDestroyed()
只有在所有請求都完成處理後?界面似乎暗示了這一點,但我沒有在文檔中找到它。另外,我不知道Tomcat在生氣之前願意等待多久,後臺線程沒有終止。
或者,有沒有更好的方法來處理這個問題?如果Spring有一些神奇的後請求後臺工作功能,那麼這是一個Spring應用程序。