gpt4 book ai didi

java - 控制 destroy() 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:58 46 4
gpt4 key购买 nike

我正在尝试优雅地关闭我的应用程序。因此,当应用程序关闭被触发时,我需要让关闭过程等待配置的秒数,在此期间我仍然会处理很少的请求。

我一直在尝试在 destroy() 方法中使用 wait/sleep,但是此时上下文已经被销毁了。我的理解是 destroy() 将由容器调用。是否可以控制destroy方法,延迟关机进程的启动?

谢谢。

最佳答案

您给定的方法将不起作用。原因是 destroy() 方法。每个 servlet 都有自己的 destroy() 方法。这些方法在容器卸载 servlet 时调用,而不是在您的应用程序关闭时调用。当容器不使用 servlet 时,可以卸载 servlet。您可以让您的应用程序运行,但您的 servlet 可能会得到由容器卸载,因为容器可能已经决定不需要这些 servlet。

解决方案:您可能需要一个 ServletContextListener。 ServletContext 与您的整个应用程序相关联,而不仅仅是与单个 servlet 相关联。当您的应用程序正在加载时,将调用 ServletContextListener 的 contextInitialized(),当您的应用程序正在卸载时,将调用 contextDestroyed()。所以在 contextDestroyed( ),你可以让威胁 hibernate 并执行其他任务。

    @WebListener
public class MyContextListener implements ServletContextListener
{

public void contextInitialized(ServletContextEvent event)
{
System.out.println("\n \n \n \n ServletContext is being initialized..... \n \n \n");
}

//Perform cleanups like removing DB connection.closing session etc. while closing appliction
public void contextDestroyed(ServletContextEvent event)
{
try{
//Sleep this thread.
Thread.sleep(10000);
} catch(Exception ex){ ex.printStackTrace(System.err); }
}
}

关于java - 控制 destroy() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245823/

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