【发布时间】:2014-02-05 23:28:30
【问题描述】:
我正在建立一个用户可以请求异步运行任务的系统。
我将这些任务存储在 Grails 域类 ScheduledTask 的表中。
我有两个 Quartz 工作
-
CheckForScheduledTasksJob
- 每 30 秒触发一次
-
RunActionJob
- 在需要时按需触发
- (将来会同时运行可配置的数量。)
目前的代码流程是:
CheckForScheduledTasksJob
CheckForScheduledTasksJob {
void execute() {
taskService.checkForScheduledTasks()
}
}
任务服务
void checkForScheduledTasks() {
ScheduledTask scheduleTask = getNextPendingTask()
if (scheduleTask) {
Map params = [ scheduleTask:scheduleTask ]
RunActionJob.triggerNow(params)
}
}
此时我收到以下错误:
| Error 2014-01-02 15:00:01,112 [quartzScheduler_QuartzSchedulerThread] ERROR core.ErrorLogger - An error occurred while scanning for the next triggers to fire.
Message: Couldn't acquire next trigger: Couldn't retrieve trigger: com.mypath.RunActionJob
Line | Method
->> 2848 | acquireNextTrigger in org.quartz.impl.jdbcjobstore.JobStoreSupport
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 2759 | execute in org.quartz.impl.jdbcjobstore.JobStoreSupport$40
| 2757 | execute . . . . . . . . . in ''
| 3787 | executeInNonManagedTXLock in org.quartz.impl.jdbcjobstore.JobStoreSupport
| 2756 | acquireNextTriggers . . . in ''
^ 272 | run in org.quartz.core.QuartzSchedulerThread
Caused by JobPersistenceException: Couldn't retrieve trigger: com.mypath.RunActionJob
->> 1533 | retrieveTrigger in org.quartz.impl.jdbcjobstore.JobStoreSupport
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 2808 | acquireNextTrigger in ''
| 2759 | execute . . . . . . . . . in org.quartz.impl.jdbcjobstore.JobStoreSupport$40
| 2757 | execute in ''
| 3787 | executeInNonManagedTXLock in org.quartz.impl.jdbcjobstore.JobStoreSupport
| 2756 | acquireNextTriggers in ''
^ 272 | run . . . . . . . . . . . in org.quartz.core.QuartzSchedulerThread
RunActionJob 的代码仍在开发中。到目前为止,它看起来是:
class RunActionJob implements InterruptableJob, Serializable {
boolean interrupted = false
static triggers = {
}
void execute(JobExecutionContext context) {
log.info ("HERE " + (new Date()))
ScheduledTask task = context.getMergedJobDataMap()?.scheduleTask
return
}
void interrupt() {
interrupted = true
}
}
提前感谢您的任何帮助或回复。
【问题讨论】:
-
我发现如果我在没有参数的情况下以 RunActionJob.triggerNow() 的形式触发作业,它就可以工作。但是,这对我没有帮助,因为我需要将各种参数传递给 Job。
-
在你的工作中定义一个空的静态触发器,例如:
static triggers = {},看看它是否有帮助。这个question 也可能有帮助 -
能否请您提一下 RunActionJob 类的代码?
-
@Alidad:我的工作中确实有
static triggers = {}。有它或没有它都没有区别。我之前看到过另一个问题,希望该解决方案也对我有用,但它没有。 -
@Ak Goel:我添加了上面的代码。
标签: exception grails quartz-scheduler