出现这种问题时,如果用到了spring及其他涉及到管理应用生命周期的组件时,要特别注意:周期性任务及单例模式的问题,这是个致命的灾难。
这类问题,通常都是在tomcat下配置了多个应用程序时发生
错误配置方式:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/Volumes/Work/apache-tomcat-6.0.29/webapps/YourProjectName" debug="0" reloadable="true" /> </Host>
这种情况下在tomcat加载完成Host -> webapps目录下的应用后,找到Context ->docBase指定的应用,再次加载;
由于YourProjectName应用所在目录在webapps下,顾会使其多次加载;
ok ,现在我们了解了tomcat容器加载应用的基本过程后,问题就很容易解决了。
如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/Volumes/Work/YourProjectName" debug="0" reloadable="true" /> </Host>
再或:
为配合eclipse开发与调试,控制台移出到非webapps目录下
<Host name="localhost" appBase="/Volumes/Work/apache-tomcat-6.0.29/t_root" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/Volumes/Work/apache-tomcat-6.0.29/webapps/YourProjectName" debug="0" reloadable="true" /> </Host>