我正在使用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)
为什么不采用参数?而且,我怎样才能实现我想要的,使用自定义触发器和作业的地图或参数?
答案 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)