我正在使用Quartz2 Plugin,我正在尝试动态触发一项非常简单的工作。当用户执行某个操作时,该作业将来会被触发一定的分钟数,并且只能运行一次。
我尝试使用简单的“计划”方法来获取日期和工作数据:
def sendTime = new Date()
use(groovy.time.TimeCategory) {
sendTime = sendTime + (connectionInstance.timeout).minutes
println "I will send the job at $sendTime"
}
ReportSmssyncTimeoutJob.schedule(sendTime, [connectionId:params.id])
在此设置中,我发现作业实际上是立即触发而不是等到'sendTime'。
在查看插件源之后,我的第二次尝试是使用SimpleTrigger
def sendTime = new Date()
use(groovy.time.TimeCategory) {
sendTime = sendTime + (connectionInstance.timeout).minutes
println "I will send the job at $sendTime"
}
// arguments here are: jobKey='test', startTime=sendTime, repeatCount=0, repeatInterval=1 (zero not allowed), job-arguments)
def trigger = TriggerHelper.simpleTrigger(new JobKey("test"), sendTime, 0, 1, [connectionId:params.id])
ReportSmssyncTimeoutJob.schedule(trigger)
在此设置中,作业也会立即触发。 SimpleTrigger实现是否有问题阻止它等到startDate?
不幸的是,切换到主要的'quartz'插件(现在支持Quartz 2)不是一个选项,因为我正在开发一个项目,该项目有大量工作设置为使用quartz2插件。
答案 0 :(得分:1)
我在Grails邮件列表上问了这个问题并得到了答案:这是quartz2插件中的一个错误。它应该在下一个版本中修复(错误在0.2.3中注明)。
更新:在quartz2插件的v2.1.6.2中对此进行了测试,并且可以确认我的问题中的两种方法现在都有效。