使用自定义触发器和参数安排作业

时间:2012-01-12 10:43:58

标签: grails quartz-scheduler

我正在使用Grails Quartz插件,并希望使用以编程方式创建的触发器来安排我的作业。我事先不知道执行间隔是什么。我希望这份工作无限期地执行。

The docs give some examples如何安排/触发工作:

  

==动态作业调度==

     

从0.4.1版本开始,您可以动态安排作业执行。

     

这些方法可用:

     
      
  • MyJob.schedule(String cronExpression, Map params?)创建了cron触发器;
  •   
  • MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?)创建简单的触发器:重复作业repeatCount + 1次,延迟为repeatInterval毫秒;
  •   
  • MyJob.schedule(Date scheduleDate, Map params?)将一个作业执行安排到特定日期;
  •   
  • MyJob.schedule(Trigger trigger)使用自定义触发器安排作业的执行;
  •   
  • MyJob.triggerNow(Map params?)强制立即执行该作业。

         

    每个方法(自定义触发器除外)都采用可选的“params”参数。您可以使用它将一些数据传递给作业,然后从作业中访问它。

  •   

Grails版本1.3.7 Quartz插件版本0.4.2

那么,MyJob.schedule(Trigger trigger)为什么不采用参数?而且,我怎样才能实现我想要的,使用自定义触发器和作业的地图或参数?

2 个答案:

答案 0 :(得分:3)

如果您在where these methods are defined中查看Quartz plugin sourcecode,则可以看到所有带Map params的函数都是包装器,它们创建Trigger然后将其激活为调度程序。

MyJob.schedule(Trigger trigger)方法,只是触发您传递的触发器,因此您可以在调用此方法之前将参数添加到Triggers jobDataMap属性中,即:

trigger.jobDataMap.putAll [foo:"It Works!"]
MyJob.schedule( trigger )

答案 1 :(得分:1)

时间答案是正确的,这里有一点点更新。

Trigger trigger = TriggerBuilder
                .newTrigger()
                .startNow()
                .withIdentity("triggerName", "groupName")
                .withSchedule(
                SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5000).repeatForever()
                ).build();
        trigger.jobDataMap.putAll([foo:"bar"])
        MyJob.schedule(trigger)