(转) Spring的quartz定时器同一时刻重复执行二次的问题解决{经测试不可用}

news/2024/7/4 2:58:51
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此。
打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候,重复启了两个quartz线程。 
研究下来发现quartz确实会加载两次: 
第一次:web容器启动的时候,读取applicationContext.xml文件时,会加载一次。 
第二次:Spring本身会加载applicationContext.xml一次。 
而我的quartz配置就是写在applicationContext.xml文件里的。 

解决办法很简单 
先把quartz配置信息提取出来,单独存成一个文件,比如applicationContext-quartz.xml 
然后修改web.xml,让web容器启动时,可以加载该文件 

这样quartz只会在web容器启动时加载一次,Spring不会再加载了。
 
web.xml配置如下:
 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/applicationContext-timertask.xml</param-value>
  </context-param>
  <!-- 开启监听 -->
  <listener>
       <listener-class>
           org.springframework.web.context.ContextLoaderListener
       </listener-class>
   </listener>
 
把定时器的配置单独写成一个配置文件,在web容器启动的时候只加载一次
 
这个问题在Spring的TimerTask定时器下也会出现,解决方法也是如此,希望对各位大侠有所帮助
 
 
 
REFS:http://blog.csdn.net/zhujianpengzha/article/details/8140442

http://www.niftyadmin.cn/n/4235272.html

相关文章

(转)oracle常用函数一:数字函数

1&#xff0c;abs(n) 返回n的绝对值 [plain] view plaincopy SQL> select abs(-1),abs(1) from dual; ABS(-1) ABS(1) ---------- ---------- 1 1 2&#xff0c;ceil(n) 返回大于等于n的最小整数 [plain] view plaincopy SQL> select cei…

(转)上传文件思路

一看就是用了AJAX_UPLOAD,点图的时候就上传了吧.如果是这样的接下来你会需要:创建临时目录AJAX_UPLOAD至临时目录FORM提交时将临时目录文件mv至正式目录写个定时任务清理临时目录临时目录有很多方法,量不多的话日期目录最简单.任务清理前一天的任务临时目录的文件其实可以异步删…

Databing()的使用

我们先来看一个简单的例子&#xff1a; <% Page Language"C#" %> <% Import Namespace"System.Data" %> <Script Language"C#" Runat"Server"> public void Page_Load(Object src,EventArgs e) { //首先建立一…

【转】动态树

动态树是一种“超级数据结构”&#xff0c;它能够维护一个由若干有根树组成的森林&#xff0c;在对数的时间复杂度内支持&#xff1a; 1.查询一个点的父亲 2.查询一个点所在的树的根 3.修改某个节点的权 4.向从某个节点到它所在的树的根的路径上的所有的节点的权增加一个数 5.查…

(转)java之用volatile和不用volatile的区别

在当前的Java内存模型下&#xff0c;线程可以把变量保存在本地内存&#xff08;比如机器的寄存器&#xff09;中&#xff0c;而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值&#xff0c;而另外一个线程还继续使用它在寄存器中的变量值的拷贝&…

hyperv虚拟机上虚拟机的cpu个数问题

虚拟机支持的内存容量最多达64G&#xff0c;虚拟机支持的vcpu个数最多为4个&#xff08;如果你虚拟机是WIN2008最多可以4个&#xff0c;如果是win2003最多2个&#xff08;这里其实是表示微软支持的个数&#xff0c;你也可以通过别的技术手段可以支持4个&#xff09;&#xff0c…

(转)为什么volatile不能保证原子性而Atomic可以?

在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作&#xff0c;因为先写32位&#xff0c;再写后32位&#xff0c;分两步操作&#xff0c;而AtomicLong赋值是原子操作&#xff0c;为什么&#xff1f;为什么volatile能替代简单的锁&am…