项目涉及到定时任务,用的spring自带的定时任务
<task:scheduler id="scheduler"/>
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="scheduledTaskOilQuery" method="addCollectOil" cron="0 */1 * * * ?"/>
</task:scheduled-tasks>
部署到服务器上,却发现定时任务执行的结果总是重复一次。刚开始以为是数据本身问题。后查看日志,定时任务每次都执行了两遍。因为执行的时间一样,除了微妙级别有差异。
这类问题,网上也有类似的解答,但不符合我的实际情况。但查找问题的方向一致:定时任务很可能被加载了两次或多次。
网上的一类问题是配置文件的疏忽导致,定时任务所在spring配置文件被加载了两次。具体原因是有些配置用了通配符配置了一次,又明确的指定了一次,或是spring容器按默认的规则加载了一次。而你的配置文件正好是默认名,默认路径。详细的可以到网上搜索。
重点说我遇到的问题。检查配置后确认不是配置文件的问题。猜想有可能是整个项目加载了两次。
一般项目文件在tomcat的webapps目录下放置,又在l中通过<context>节点配置了一次,且path名称配置的还与工程名(webapps下的)不一致,又可能因为这个项目加载了多次。
比如在webapps下工程为mywebl中为了简化访问路径又通过<contex path="web" docbase="myweb">配置了一次。当我们在浏览器访问时,两个路径都是可以访问的。且在工程中上下文是不一样的。
所以解决方法是,1.去掉l中的配置;2l中的配置path名称改成与工程一致(这也就失去了配置的意义);3:工程文件不放在webapps目录下,移到外部任何目录。l中的context节点中的docbase做相应的改动。
还有一种很隐蔽的问题会导致类似情况,甚至会出现很多并发症。当项目中有随项目启动而启动的后台任务,在tomcat关闭时本应该结束的。却由于资源的释放一直没有处理好,导致
项目结束不掉。处于一种半运行半停止的状态。多次重启tomcat就会有多个项目实例一样。出现的问题就不止是任务执行多次了。还会有其他觉得很奇怪的问题。
本文发布于:2024-01-31 23:41:52,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671571332244.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |