解决在用Spring的定时器是出现的执行方法调用两次(实例被构造两次)的问题
今天在优化一个已经上线的项目上要实现一个定时器,其主要作用时为了定时删除一些文件、图片及视频,可是按正常的在web.xml、applicationContext.xml中配置相应的配置完成后启动Tomcat,然后在测试的时候居然我的定时器任务方法执行了两次。
问题所在:配置文件web.xml的配置
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
SpringMVC中再web.xml中有上面两行代码片,我的定时器配置在applicationContext.xml,在项目启动的时候扫描了两遍配置文件,也就是两个容器中都拿到了定时器。解决方法:单独把定时器配置在一个新创建的文件spring-timer.xml里面,然后就可以了。