`
nesuk
  • 浏览: 167756 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Spring集成Quartz的concurrent属性

阅读更多
关于Spring集成Quartz的concurrent属性

以前经常在任务调度程序中使用Spring集成的Quartz,这种方式可以用简单的声明式配置即可实现定时任务,并结合了Spring自身的Bean的管理功能,非常方便。配置样本如下:
<bean id="transmitTask" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	<property name="targetObject">
		<ref bean="transTaskBusiness" />
	</property>
	<property name="targetMethod">
		<value>execute</value>
	</property>
	<property name="concurrent">
		<value>false</value>
	</property>
</bean>


其中concurrent属性标识的解释为:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。

那么此处的第二个job到底是被推迟执行了,还是被取消了呢? 今天带着这个疑问做了一个小实验,具体做法如下:将任务的Trigger设置为每10秒钟执行一次,然后在执行的任务体内让Thread暂停15秒钟,这样不同的job之间肯定会有时间上的重叠。当启动程序之后,发现前一个job执行结束的时刻的秒数为15,而且第二个本来在10s就执行的job马上就启动了。

由此可见,concurrent属性实际是将job推迟执行了。
分享到:
评论
5 楼 lxs647 2018-03-16  
gwnszbd 写道
本文说不同job不够准确,而且会引起歧义,以为是是另一个定时任务,准确的说是
下一次执行的相同job


正解。。。O(∩_∩)O哈哈~
4 楼 gwnszbd 2017-05-24  
本文说不同job不够准确,而且会引起歧义,以为是是另一个定时任务,准确的说是
下一次执行的相同job
3 楼 zqb666kkk 2014-01-29  
不错 正在找这方面的资料
2 楼 尹鹏波 2013-06-18  
我试过对 不同job 同一时间触发,不设置concurrent = false。测试结果是两个任务都会触发的。
1 楼 yming 2013-03-23  
就是说如果调度的是同一个job,在默认concurrent=true的情况下,就会出现“第一个JOB没完成,第二个JOB就开始了”啊?下面是不是LZ说的这种情况啊:
Thread-1正在执行。。
Thread-2正在执行。。
Thread-1正在删除数据。。。
Thread-1任务结束

LZ试过对于不对的JOB,同一个时间触发会有这个问题么,如果不设置concurrent = false的话。
还有个问题就是:spring对quartz进行了封装,默认情况下,它的JOB状态都是无状态的吗?我还有琢磨,呵呵。。

相关推荐

Global site tag (gtag.js) - Google Analytics