Quartz调度程序在给定时间不会触发

时间:2011-07-08 07:56:05

标签: java quartz-scheduler

我有一个程序可以将作业重新安排一个小时。有时它会在给定时间触发,有时会错过触发时间。

日志中没有异常或错误。如何在给定时间使触发器工作?

邀请任何帮助。我的代码如下:

StdSchedulerFactory sf = new StdSchedulerFactory();
Scheduler clusteredScheduler = sf.getScheduler();
Trigger tg = clusteredScheduler.getTrigger("myjob", "group1");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, schedulerConstants.HOUR);
Trigger tg = scheduler.getTrigger(
    schedulerConstants.START_PREPARE_SEARCH_CONSUMER_JOB_NAME,
    schedulerConstants.JOB_GROUP_NAME);
((CronTrigger) tg).setCronExpression(
    "0 " + cal.get(Calendar.MINUTE) + " " + cal.get(Calendar.HOUR_OF_DAY) + " * * ?");
clusteredScheduler.rescheduleJob("myjob", "group1", tg);

这是我的完整代码。有时调度程序会卡住并保持无响应状态。日志中没有错误或异常。我已经尝试增加线程池中的线程数,问题仍然存在。

1 个答案:

答案 0 :(得分:2)

您的代码不足以帮助您确定问题。您只显示更新现有触发器的代码部分(scheduler.getTrigger(...))。在更新触发器后,您可能忘记重新安排作业:Scheduler#rescheduleJob。另外,请小心重复使用多个作业的相同触发器。

您的触发器是每天,在特定时间(更具体地说 - 当前时间,并且很可能是一小时添加)。您是否尝试过更频繁地触发系统,看看会发生什么(除非您没有更好的方法来自动化此测试)?

以防万一 - 如果你正在试验你的开发时间。机器查看它是否以指定的间隔运行作业,它实际上可能无法正常工作。