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

情景:在使用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

猜你喜欢

转载自blog.csdn.net/weixin_45202377/article/details/92375016
今日推荐