gpt4 book ai didi

Java、Tomcat、ServletContextListener 和后台线程

转载 作者:行者123 更新时间:2023-11-28 21:57:13 25 4
gpt4 key购买 nike

我有一个处理特定传入请求的 servlet。我们将其称为“UpdateUserStats”。我希望调用速度快,但我还需要请求来完成一项相当昂贵的任务。我认为,如果我让 UpdateUserStats servlet 完成所有决定成功或失败的工作,保持新状态,然后将一些工作排​​入队列以供后台线程处理并立即返回成功,这可能是一个不错的解决方案。

这看起来不错,但我想知道如何处理关机。当服务器关闭时,我想确保它不会终止后台线程,直到没有更多工作剩余。我正在考虑使用 tomcat ServletContextListener 让后台线程知道服务器正在关闭,并且可以在队列结束后退出,但我不是 100% 确定它的行为方式。 contextDestroyed() 只有在所有请求都处理完之后才会发生吗?界面似乎暗示了这一点,但我没有在文档中找到它。另外,我想知道 Tomcat 在因后台线程未终止而生气之前愿意等待多长时间。

或者,有没有更好的方法来处理这个问题?如果 Spring 具有一些神奇的请求后后台工作功能,那么它就是一个 Spring 应用程序。

最佳答案

基于 servlet 规范文档

“在应用程序关闭时,监听器会以与其声明相反的顺序收到通知在通知上下文监听器之前通知 session 监听器。必须先于上下文监听器通知 session 监听器 session 失效收到应用程序关闭通知。”

所以这应该是处理通知线程完成其工作的第一个监听器。

我使用过 tomcat,据我所知,如果监听器到那时还没有完成,它不会等待超过 10-15 秒就放弃执行干净关闭。

通常像 Spring 这样的所有容器都使用监听器在关闭期间干净退出

关于Java、Tomcat、ServletContextListener 和后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com