【发布时间】:2011-08-09 21:56:49
【问题描述】:
我有一个处理特定传入请求的 servlet。我们称它为“UpdateUserStats”。我希望调用速度很快,但我也需要请求来完成一项相当昂贵的任务。我认为如果让 UpdateUserStats servlet 完成所有决定成功或失败的工作,保持新状态,然后将一些工作排入队列以供后台线程处理并立即返回成功,我认为这可能是一个不错的解决方案。
这看起来不错,但我想知道如何处理关机。当服务器关闭时,我想确保它不会杀死后台线程,直到没有更多的工作。我正在考虑使用 tomcat ServletContextListener 让后台线程知道服务器正在关闭,一旦队列结束就可以退出,但我不能 100% 确定这将如何表现。只有在处理完所有请求之后,contextDestroyed() 才会?界面似乎暗示了这一点,但我没有在文档中找到它。另外,我想知道 Tomcat 愿意等待多长时间才会因为后台线程没有终止而生气。
或者,有没有更好的方法来处理这个问题?如果 Spring 有一些神奇的请求后后台工作功能,它就是一个 Spring 应用程序。
【问题讨论】:
标签: java tomcat servlets spring-mvc