我在grails中有一个石英工作,需要每5秒执行一次,但我需要按顺序执行。在某些情况下,工作的执行超过了5秒,在这种情况下,我并不想在先前的执行没有完成时执行。如何在grails中配置它?如何防止在Grails中同时执行作业?
(当然全魔可以用静态挥发标志位来完成,但并不是一个非常优雅的方式来做到这一点) (此外,我怎么可以配置工作是单身?)
THX
我在grails中有一个石英工作,需要每5秒执行一次,但我需要按顺序执行。在某些情况下,工作的执行超过了5秒,在这种情况下,我并不想在先前的执行没有完成时执行。如何在grails中配置它?如何防止在Grails中同时执行作业?
(当然全魔可以用静态挥发标志位来完成,但并不是一个非常优雅的方式来做到这一点) (此外,我怎么可以配置工作是单身?)
THX
假设你正在使用的Grails的石英插件,你就应该能够把它添加到您的工作:
def concurrent = false
“默认情况下,乔布斯在并行的方式执行,因此新的作业执行可以启动,即使同样的工作在以前执行仍在运行。如果要覆盖此行为,你可以使用“并发”属性,在这种情况下,石英的StatefulJob将用于”
在和我实现它而不石英,使用弹簧任务:
beans = {
xmlns task: "http://www.springframework.org/schema/task"
task.'scheduler'('id':"myScheduler", 'pool-size':"1")
task.'scheduled-tasks'('scheduler':"myScheduler") {
task.'scheduled'(ref:"myBean", method:"myBeanMethodToExec", 'fixed-delay':5000)
}
}
(池大小1我认为甚至没有必要,但可以肯定是100%;))
您问了一个问题,然后选择了一个没有解决问题的答案。无论您最终使用什么,这都不是解决您所问问题的最佳答案。 –
是的你是对的,虽然我写了“他不能阻止任务不断积累到队列中” - 我在脑海中想到了这种方法,事实上这是在春季调度程序中解决的。但你是对的,这是对我的问题的一个很好的答案。 – csviri
是的,这是解决方案,但我认为这并不妨碍任务的持续积累队列... – csviri
那么如何防止任务队列增长,直到OutOfMemory发生? – csviri
通常您希望任务排队,当任务是“计数”或“分步”任务类型时,一个长任务不应阻止其他任务执行。如果这实际上是一个问题,那么Quartz可能不是你想要的,你想要的是一个不断在循环中运行的线程。如果你需要限制它,你可以放一个Thread.sleep(remainingTime)来延迟。 –