我正在尝试正常关闭我的应用程序。因此,当触发应用程序关闭时,我需要使关闭进程等待配置的秒数,在此期间我仍然会提供少量请求。
我一直在尝试在destroy()方法中使用wait / sleep,但此时已经破坏了上下文。我的理解是容器会调用destroy()。是否可以控制销毁方法并延迟关机过程的开始?
感谢。
答案 0 :(得分:2)
你的给定方法不起作用。原因是destroy()
方法。每个servlet都有自己的destroy()
方法。当卸载servlet时调用这个方法通过容器,而不是当你的应用程序被关闭时。当容器没有使用servlet时,可以卸载servlet。你可以让你的应用程序运行,但是容器可能会卸载你的servlet因为容器可能已经被拒绝了这些servlet不需要。
解决方案:您可能需要的是ServletContextListener。 ServletContext与您的整个应用程序相关联,而不仅仅与单个servlet相关联。在加载应用程序时,将调用ServletContextListener的contextInitialized()
,并在卸载应用程序时调用contextDestroyed()
。在contextDestroyed()
中,您可以睡眠并执行其他任务
@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); }
}
}