找出哪个Quartz触发器触发了作业

时间:2013-12-11 15:49:58

标签: grails groovy quartz-scheduler

有没有办法告诉哪个触发器是踢掉工作的?我有一个Grails应用程序,我正在使用石英插件安排一些工作,但我希望能够做一些不同的事情取决于哪个触发器开始工作...

class MyJob {

  static triggers = {
     cron name: 'noonTrigger', cronExpression: '0 0 12 * * ? *'//12:00 PM every day
     cron name: 'twoPMTrigger', cronExpression: '0 0 14 * * ? *'//2:00 PM every day
  }

  def execute(){
     if(noonTrigger)
        ...
     else if(twoPMTrigger)
        ...
     else
        ...//kicked off from controller
  }
}

有没有办法告诉执行哪个触发器启动了这个?或者甚至可以说这个工作没有被触发器拉开,但是从一些控制器代码或类似的东西开始?

编辑: 根据Joshua Moore的信息,代码如下:

def execute(context){ 
  if(context.trigger.key.name == 'noonTrigger'){
    ...
  }...
  ...
}

像冠军一样工作。从控制器看来,名称是随机生成的(?),但这仍然可以正常工作:

class MyController{
  def myMethod(){
    MyJob.triggerNow([:])
  }
}

1 个答案:

答案 0 :(得分:2)

Grails Quartz插件允许您使用JobExecutionContext的单个参数定义执行方法(例如def execute(context))。从JobExecutionContext中,您可以使用getTrigger()来查找用于触发作业的触发器。看一下API文档 JobExecutionContext了解更多信息。