通过 grails 1.3.7 中的 quartz 插件 0.4.2 停止 cron 作业
Stop cron job via quartz plugin 0.4.2 in grails 1.3.7
我有 grails 1.3.7 和 quartz 插件 0.4.2 用于 cron 作业。
class MyJob {
static triggers = {}
void execute() {
//some doings.
}
}
在我的代码中的某个地方,我对我的工作进行了动态调度:
MyJob.schedule(cronExpression)
每次我安排新的 cron 作业时,它都会创建一个新作业,并与之前创建的作业一起工作。但我想每次都用新的 MyJob 的旧 cron 作业替换。
也许我的理解有误,但我尝试添加
def concurrent = false
没用。
有什么办法可以停止某个作业 class 的所有作业吗?
谢谢!
UPD: 据我了解,在这个版本的 quartz 插件中没有 InterruptableJob 这样的东西。我说得对吗?
我终于找到了取消工作安排并安排另一工作的方法。
首先,我添加了一个工作组:
class MyJob {
def group = 'jobGroupName'
static triggers = {}
void execute() {
// some stuff
}
}
我还发现 JobManagerService inside plugin 有非常有用的方法。但是我正在研究源代码以了解它是如何正常工作的。一段时间后,我的解决方案变成了下一个代码(也许它是原始的,但它有效):
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)
}
}
}
有时不清楚服务方法中需要哪个名称和组。所以调试和资源帮助了我。
我有 grails 1.3.7 和 quartz 插件 0.4.2 用于 cron 作业。
class MyJob {
static triggers = {}
void execute() {
//some doings.
}
}
在我的代码中的某个地方,我对我的工作进行了动态调度:
MyJob.schedule(cronExpression)
每次我安排新的 cron 作业时,它都会创建一个新作业,并与之前创建的作业一起工作。但我想每次都用新的 MyJob 的旧 cron 作业替换。 也许我的理解有误,但我尝试添加
def concurrent = false
没用。 有什么办法可以停止某个作业 class 的所有作业吗? 谢谢!
UPD: 据我了解,在这个版本的 quartz 插件中没有 InterruptableJob 这样的东西。我说得对吗?
我终于找到了取消工作安排并安排另一工作的方法。 首先,我添加了一个工作组:
class MyJob {
def group = 'jobGroupName'
static triggers = {}
void execute() {
// some stuff
}
}
我还发现 JobManagerService inside plugin 有非常有用的方法。但是我正在研究源代码以了解它是如何正常工作的。一段时间后,我的解决方案变成了下一个代码(也许它是原始的,但它有效):
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)
}
}
}
有时不清楚服务方法中需要哪个名称和组。所以调试和资源帮助了我。