Eclipse内嵌Tomcat中ContextListener每次请求触发问题排查
ServletContextListener 每次请求重复触发的原因与解决
- 原本预期:实现
ServletContextListener并在web.xml中配置后,contextInitialized方法仅会在应用首次启动(首次请求时)触发一次。 - 异常表现:在Eclipse内嵌的Tomcat环境中,该监听器的
contextInitialized方法每次请求都会触发。 - 排查过程:查看Tomcat运行日志,发现存在
StandardContext reload的记录,证明应用在每次请求时都被自动重载了。 - 根因定位:请求处理逻辑中会修改项目
resource目录下的文件,Eclipse会自动监控项目内文件的变更,一旦检测到文件修改就触发应用重载,监听器会随应用重启重新执行contextInitialized方法。 - 解决方向:
- 调整业务逻辑,避免在运行时修改
resource目录下的文件; - 关闭Eclipse内嵌Tomcat的自动重载功能:在Tomcat服务器配置面板中找到"Auto reloading enabled"选项并取消勾选;
- 若需动态修改文件,将文件迁移至项目外部的独立目录,避开Eclipse的文件变更监控范围。
- 调整业务逻辑,避免在运行时修改
内容的提问来源于stack exchange,提问作者roediGERhard
相关产品推荐
相关产品推荐

