分享

定时任务会重复执行俩次的解决方法

 hongjing_z 2022-09-17 发布于上海

情景:在使用SpringMVC的定时任务的注解时,发现自己的定时任务会重复执行俩次。这是为什么呢?

java代码:

 

spring-mvc.xml配置:

这样配置完后,在启动项目后,项目便能按照指定的时间,间隔半小时执行一次。任务是没半小时执行了,但是每次会重复俩次插入操作。这让我有些费解了。我上网搜索了一下类似的情况的前辈们的解决方法,然后才知道原因。

 

原因:

任务在同一时刻执行了俩次,说明这个任务实例化了俩次。我看到网上大多数都是写的原因都是因为SpringMVC的配置文件,因为在web.xml中也引入了该文件而被实例化了俩次。原文如下:

但是我总是觉得这个理由不适合我的情况。如果是因为在web中配置而导致实例化了俩次的话,那么其他的用@Component等注解的类,不也会实例化俩次吗?但是我并没有发现其重复实例化的现象。那么说明,我的项目程序的配置没有问题。那么是什么原因导致我的定时任务被实例化了俩次呢?偶然间看到一个微博上写的,如果太多配置写在一个.xml文件中,会导致在扫描的时候,重复实例化。原作者语言如下:(以作日后参考)

偶然间我鼠标放在了配置文件的一个标签component-scan属性上,我恍然大悟:

component-scan:扫描标签会自动将拥有@Component注解的类实例化为Bean,而在我定义的任务类上恰好有这么个标签!而在项目中,这个标签早就已经引入使用了,而我再定义了一个,那么就相当于将拥有@Component注释的类实例化了俩次。即使扫描的包不同,但是先前定义的扫描范围可是整个项目的。这样一来,我的这个任务类相当于被实例化了俩次。那么,直接把这个扫描配置删了,不就成了?

 

解决:

我直接将配置文件中我自己定义的那个自动扫描包的配置:

删除,然后测试,果然,任务只执行了一次。到此,问题解决!

 

参考来源:

http://blog.csdn.net/chaijunkun/article/details/6925889

 

总结:

虽然在开发的时候用springMVC用的很多,但是对于spring的种种功能和配置,我还是很糊涂的。这也说明了我springMVC基础知识的薄弱性。springMVC的学习有待加强啊!

解决此类问题:

1)看配置文件是否有问题:这里的配置文件指的是web.xml和spring-mvc间的配置,是否会导致实例化重复,如果有,就直接修改配置就行;

2)除开1)的情形,即web配置不会导致重复实例化的话,那么就看spring-mvc.xml中的扫描配置是否有重叠的地方,如果有,将重叠的地方去掉就行。

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多