通过 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)
        }
    }
}

有时不清楚服务方法中需要哪个名称和组。所以调试和资源帮助了我。