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也不要加上。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值