我有grails 1.3.7和石英插件0.4.2 for cron jobs。
class MyJob {
static triggers = {}
void execute() {
//some doings.
}
}
在我的代码的某个地方,我可以动态安排我的工作:
MyJob.schedule(cronExpression)
每次我安排新的cron作业时,它都会创建一个新的cron作业,它与以前创建的作业一起工作。但我想每次用新的替换MyJob的旧cron作业。 也许我的理解是错的,但我试图添加
def concurrent = false
没有帮助。 有什么方法可以阻止某些工作班的所有工作吗? 谢谢!
UPD:据我所知,在这个版本的石英插件中没有InterruptableJob这样的东西。我是对的吗?
答案 0 :(得分:0)
最后,我找到了如何取消安排工作并安排另一个工作的方法。 首先,我添加了一个工作小组:
class MyJob {
def group = 'jobGroupName'
static triggers = {}
void execute() {
// some stuff
}
}
此外,我在插件中找到了JobManagerService,并提供了非常有用的方法。但我正在研究源代码以了解它是如何正常工作的。一段时间后,我的解决方案变成了下一个代码(也许它还是原始的,但它确实有效):
class MyService {
def jobManagerService
def rescheduleJob() {
def job = jobManagerService.getJob('jobGroupName').first()
Scheduler scheduler = jobManagerService.quartzScheduler
Trigger trigger = scheduler.getTriggersOfJob(job, 'jobGroupName').first()
if (!jobManagerService.unscheduleJob(trigger.group, trigger.name)) {
log.warn('Failed during unscheduling job')
} else {
MyJob.schedule(newCronExpression)
}
}
}
有时在服务方法中需要哪个名称和组并不清楚。所以调试和来源帮助了我。