首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

解决Spring定时计划任务重复执行两次(实例被构造两次)有关问题的方法

2012-12-23 
解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法?原文地址:?http://blog.csdn.net/chaijun

解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法

?

原文地址:?http://blog.csdn.net/chaijunkun/article/details/6925889

?

定时计划任务:spring + quartz

?

最近在学习使用spring定时计划任务, 发现计划任务被执行了2次, 经过查找, 在网上找到一个很详细的解决方法

?

在文章的最后,我会将自己更简单的解决方法贴出来供大家参考。下面请先来看看造成计划任务被重复执行的原因何在:



原文:

今天在做一个项目的时候用到了Spring的定时计划任务。这是Spring的特色功能,可以根据设置在特定的时间或间隔时间做特定的事。

下面给出一个例子:

?

解决办法就是将web.xml配置文件中的如下节点删掉:

问题来了,有时候不注重对象初始化的分类,尤其是使用<context:component-scan base-package="controller" />这样的包扫描形式统一初始化,
很容易造成满足条件的对象被初始化两次,那么在计划任务的时候被执行两次也就不奇怪了。其实说来说去,还是要提醒大家,不同的配置文件其作用是不一样的,
不要将所有的初始化操作都放到一个配置文件中,更不要重复配置。不仅浪费资源,还很容易导致莫名其妙的故障。

?

?

另外,有相关文章还提到过是Tomcat服务器的问题,修改conf目录下的server.xml。修改节点Host,将appBase属性由默认的“webapps”设置为空("")即可,如下所示:

>????

但是本人尝试之后并没有起作用。可能不适用于我遇到的这个问题。写出上面解决方法的作者认为web应用程序默认都是放在webapps这个目录下的,如果不把“webapps“去掉,这里会调用一次quartz的任务调度,在接下来的“<Context path”中又会调用一次quartz的任务调度,所以就重复了2次。两个方法都写出来,供朋友们参考。

第二种解决方法来自http://nkliuliu.iteye.com/blog/816335

?

?

下面提供我的解决办法:

修改前的web.xml文件中的配置

  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:applicationContext*.xml</param-value>  </context-param>  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>

上面的配置文件,让我的定时计划任务执行了2次,下面是修改后的web.xml中的配置

?

  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:applicationContext.xml</param-value>  </context-param>  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>

?

?

注意: 我只去掉了applicationContext后面的 * 号,明确指定了加载的配置文件。

?

热点排行