情景:在使用SpringMVC的定时任务的注解时,发现本身的定时任务会重复执行俩次。这是为何呢? java
java代码: web
spring-mvc.xml配置: spring
这样配置完后,在启动项目后,项目便能按照指定的时间,间隔半小时执行一次。任务是没半小时执行了,可是每次会重复俩次插入操做。这让我有些费解了。我上网搜索了一下相似的状况的前辈们的解决方法,而后才知道缘由。 spring-mvc
缘由: mvc
任务在同一时刻执行了俩次,说明这个任务实例化了俩次。我看到网上大多数都是写的缘由都是由于SpringMVC的配置文件,由于在web.xml中也引入了该文件而被实例化了俩次。原文以下:学习
可是我老是以为这个理由不适合个人状况。若是是由于在web中配置而致使实例化了俩次的话,那么其余的用@Component等注解的类,不也会实例化俩次吗?可是我并无发现其重复实例化的现象。那么说明,个人项目程序的配置没有问题。那么是什么缘由致使个人定时任务被实例化了俩次呢?偶然间看到一个微博上写的,若是太多配置写在一个.xml文件中,会致使在扫描的时候,重复实例化。原做者语言以下:(以做往后参考) 测试
偶然间我鼠标放在了配置文件的一个标签component-scan属性上,我恍然大悟: spa
component-scan:扫描标签会自动将拥有@Component注解的类实例化为Bean,而在我定义的任务类上刚好有这么个标签!而在项目中,这个标签早就已经引入使用了,而我再定义了一个,那么就至关于将拥有@Component注释的类实例化了俩次。即便扫描的包不一样,可是先前定义的扫描范围但是整个项目的。这样一来,个人这个任务类至关于被实例化了俩次。那么,直接把这个扫描配置删了,不就成了? .net
解决: 3d
我直接将配置文件中我本身定义的那个自动扫描包的配置:
删除,而后测试,果真,任务只执行了一次。到此,问题解决!
参考来源:
http://blog.csdn.net/chaijunkun/article/details/6925889
总结:
虽然在开发的时候用springMVC用的不少,可是对于spring的种种功能和配置,我仍是很糊涂的。这也说明了我springMVC基础知识的薄弱性。springMVC的学习有待增强啊!
解决此类问题:
1)看配置文件是否有问题:这里的配置文件指的是web.xml和spring-mvc间的配置,是否会致使实例化重复,若是有,就直接修改配置就行;
2)除开1)的情形,即web配置不会致使重复实例化的话,那么就看spring-mvc.xml中的扫描配置是否有重叠的地方,若是有,将重叠的地方去掉就行。