我正在开发一个 Java Web 应用程序。该应用程序连接到 Lucene 索引。我创建了 IndexSearcher 的单例实例。该实例打开一些文件。当我重新部署 Web 应用程序时,IndexSearcher 的早期实例打开的文件继续保持打开状态,并且重新部署的应用程序将创建另一个实例。几次重新部署后,系统开始抛出“打开文件过多”异常。我想在重新部署之前关闭旧实例,以便关闭旧文件,但我不知道该怎么做? web.xml 中是否有一个在取消部署时调用的指令,类似于启动时加载?我正在 jboss 服务器上运行 Web 应用程序。
最佳答案
@WebListener
public class LuceneConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here during webapp startup.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here during webapp shutdown.
}
}
如果您还没有使用 Servlet 3.0(尽管该版本已经发布 2 年了),那么您需要删除 @WebListener
注释并在 web.xml 中手动注册它
如下:
<listener>
<listener-class>com.example.LuceneConfig</listener-class>
</listener>
关于servlets - 从 Java Web 应用程序调用取消部署的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184835/