定时任务会重复执行俩次的解决方法
2015-07-30 16:25
363 查看
情景:在使用SpringMVC的定时任务的注解时,发现自己的定时任务会重复执行俩次。这是为什么呢?
java代码:
%26nbsp;
spring-mvc.xml配置:
这样配置完后,在启动项目后,项目便能按照指定的时间,间隔半小时执行一次。任务是没半小时执行了,但是每次会重复俩次插入操作。这让我有些费解了。我上网搜索了一下类似的情况的前辈们的解决方法,然后才知道原因。
%26nbsp;
原因:
任务在同一时刻执行了俩次,说明这个任务实例化了俩次。我看到网上大多数都是写的原因都是因为SpringMVC的配置文件,因为在web.xml中也引入了该文件而被实例化了俩次。原文如下:
但是我总是觉得这个理由不适合我的情况。如果是因为在web中配置而导致实例化了俩次的话,那么其他的用@Component等注解的类,不也会实例化俩次吗?但是我并没有发现其重复实例化的现象。那么说明,我的项目程序的配置没有问题。那么是什么原因导致我的定时任务被实例化了俩次呢?偶然间看到一个微博上写的,如果太多配置写在一个.xml文件中,会导致在扫描的时候,重复实例化。原作者语言如下:(以作日后参考)
偶然间我鼠标放在了配置文件的一个标签component-scan属性上,我恍然大悟:
component-scan:扫描标签会自动将拥有@Component注解的类实例化为Bean,而在我定义的任务类上恰好有这么个标签!而在项目中,这个标签早就已经引入使用了,而我再定义了一个,那么就相当于将拥有@Component注释的类实例化了俩次。即使扫描的包不同,但是先前定义的扫描范围可是整个项目的。这样一来,我的这个任务类相当于被实例化了俩次。那么,直接把这个扫描配置删了,不就成了?
%26nbsp;
解决:
我直接将配置文件中我自己定义的那个自动扫描包的配置:
删除,然后测试,果然,任务只执行了一次。到此,问题解决!
%26nbsp;
参考来源:
http://blog.csdn.net/chaijunkun/article/details/6925889
%26nbsp;
总结:
虽然在开发的时候用springMVC用的很多,但是对于spring的种种功能和配置,我还是很糊涂的。这也说明了我springMVC基础知识的薄弱性。springMVC的学习有待加强啊!
解决此类问题:
1)看配置文件是否有问题:这里的配置文件指的是web.xml和spring-mvc间的配置,是否会导致实例化重复,如果有,就直接修改配置就行;
2)除开1)的情形,即web配置不会导致重复实例化的话,那么就看spring-mvc.xml中的扫描配置是否有重叠的地方,如果有,将重叠的地方去掉就行。
%26nbsp;
%26nbsp;
java代码:
%26nbsp;
spring-mvc.xml配置:
这样配置完后,在启动项目后,项目便能按照指定的时间,间隔半小时执行一次。任务是没半小时执行了,但是每次会重复俩次插入操作。这让我有些费解了。我上网搜索了一下类似的情况的前辈们的解决方法,然后才知道原因。
%26nbsp;
原因:
任务在同一时刻执行了俩次,说明这个任务实例化了俩次。我看到网上大多数都是写的原因都是因为SpringMVC的配置文件,因为在web.xml中也引入了该文件而被实例化了俩次。原文如下:
但是我总是觉得这个理由不适合我的情况。如果是因为在web中配置而导致实例化了俩次的话,那么其他的用@Component等注解的类,不也会实例化俩次吗?但是我并没有发现其重复实例化的现象。那么说明,我的项目程序的配置没有问题。那么是什么原因导致我的定时任务被实例化了俩次呢?偶然间看到一个微博上写的,如果太多配置写在一个.xml文件中,会导致在扫描的时候,重复实例化。原作者语言如下:(以作日后参考)
偶然间我鼠标放在了配置文件的一个标签component-scan属性上,我恍然大悟:
component-scan:扫描标签会自动将拥有@Component注解的类实例化为Bean,而在我定义的任务类上恰好有这么个标签!而在项目中,这个标签早就已经引入使用了,而我再定义了一个,那么就相当于将拥有@Component注释的类实例化了俩次。即使扫描的包不同,但是先前定义的扫描范围可是整个项目的。这样一来,我的这个任务类相当于被实例化了俩次。那么,直接把这个扫描配置删了,不就成了?
%26nbsp;
解决:
我直接将配置文件中我自己定义的那个自动扫描包的配置:
删除,然后测试,果然,任务只执行了一次。到此,问题解决!
%26nbsp;
参考来源:
http://blog.csdn.net/chaijunkun/article/details/6925889
%26nbsp;
总结:
虽然在开发的时候用springMVC用的很多,但是对于spring的种种功能和配置,我还是很糊涂的。这也说明了我springMVC基础知识的薄弱性。springMVC的学习有待加强啊!
解决此类问题:
1)看配置文件是否有问题:这里的配置文件指的是web.xml和spring-mvc间的配置,是否会导致实例化重复,如果有,就直接修改配置就行;
2)除开1)的情形,即web配置不会导致重复实例化的话,那么就看spring-mvc.xml中的扫描配置是否有重叠的地方,如果有,将重叠的地方去掉就行。
%26nbsp;
%26nbsp;
相关文章推荐
- win8.1升级Win10正式版后资源管理器出现两个OneDrive怎么办?
- 定时任务会重复执行俩次的解决方法
- Win10正式版开始菜单严重Bug曝光:快捷程序过多或导致崩溃
- GTK进阶学习:事件盒子
- hdoj-2199Can you solve this equation?【二分】
- 普元EOS开发学习(二)
- 普元EOS开发学习(一)
- TP框架中的自动验证功能$_validate
- 【框架-MFC】MFC 在捕获控件外(窗口外)鼠标事件
- C#小写人民币转大写
- MATLAB格式化输出控制
- java读取大容量excel之二(空格、空值问题)
- 自己动手写ORM
- Microsoft 常用KEY
- 定时任务会重复执行俩次的解决方法
- 网络编程笔记2
- 定时任务会重复执行俩次的解决方法
- C++派生类为什么不能重载基类的函数
- VBA 里如何正确显示日语
- hdoj 2141 Can you find it? 【二分 好题】 【求STL set 怎么破】