通过石英插件中的石英插件0.4.2停止cron作业

时间:2015-09-18 15:40:14

标签: grails cron quartz-scheduler

我有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这样的东西。我是对的吗?

1 个答案:

答案 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)
        }
    }
}

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