2

我正在使用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 插件。

4

1 回答 1

1

我在 Grails 邮件列表上问了这个问题并得到了答案:这是quartz2 插件中的一个错误。它应该在下一个版本中修复(在 0.2.3 中注意到了错误)。

更新:在quartz2插件的v2.1.6.2中对此进行了测试,并且可以确认我的问题中的两种方法现在都有效。

于 2013-01-25T14:24:39.023 回答