tomcat 在服务器(window/linux)上定时任务执行多次的BUG分析

前段时间,做一个定时任务:通过监听器(Listener)和定时器(Timer)定时执行某个任务(Task),时间是一天一次

刚开始在本机上执行是很正常,结果发到服务器上(linux系统)上发觉定时任务一下子执行了三次,间隔很短(几秒),一开始以为是定时器(Timer)与linux系统的一个bug...一直无解,后来在网上查了相关资料才发觉,这是tomcat配置的问题。

 

tomcat 的server.xml 中配置了多个 Host name,里面所配置的appBase有好几个然后都会执行一次,解决方案嘛只留一个localhost的appBase="webapps" 其他都用nginx或者apache做域名重定向来解决即可。

 

一开始的tomcat下面是只有一个hostnames配置,这时是很正常,定时任务只执行一次,如果你在这结点下面再配

<Context path="" debug="0" docBase="/opt/tomcat7/webapps/Message" reloadable="true" privileged="true">
</Context>

等信息,就会出现多次执行。

至于原理还不是很清楚。但tomcat启动,一开始是默认启动webapps 下所有项目,这时定时任务执行一次,如果

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
  <Context path="" debug="0" docBase="/opt/tomcat7/webapps/Message" reloadable="true" privileged="true">
</Context>

Host结点又配置一次,这里定时任务又要执行一次,所以如果多个hostname,会出现执行多次定时任务

最终的解决就是host只保留一个,context path也不要加上。

 


版权声明:本文为heyehuang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。