在重新加载上下文时,我们有多个 MemoryLeaks(在 catalina.out 中找到)。
为了清理这些线程,我创建了 ServletContextListener 的实现。
contextInitialized()
创建上下文时成功调用该方法,因为我可以看到日志条目。
但是该contextDestroyed()
方法没有被调用,所以我的清理代码没有被调用。任何想法为什么会发生这种情况?
当需要重新加载上下文时,我应该实现另一个需要注意的接口吗?
public class MyContextListener implements ServletContextListener {
private static final Logger log = Logger.getLogger(MyContextListener.class);
@Override
public void contextDestroyed(final ServletContextEvent arg0) {
MyContextListener.log.info("destroying Servlet Context");
//Do stuff
MyContextListener.log.info("Servlet Context destroyed");
}
@Override
public void contextInitialized(final ServletContextEvent arg0) {
try {
MyContextListener.log.info("Creating Servlet Context");
//Do stuff
} finally {
MyContextListener.log.info("Servlet Context created");
}
}
}