我正在使用Quartz Scheduler(由于项目限制而导致版本为1.8.3),并且我分配了为我的项目特定的作业创建“类MS Outlook”调度程序的任务。一切似乎都很好,但我对CronTriggers有一个非常大的问题(这个问题也存在于Quartz的2.1版本中):
我使用CronTriggers进行每日,每周和每月的重复模式。除了重复发生模式,我还提供了“否”的选项。发生的'。这已成为我生命中的祸根! CronTrigger没有像SimpleTriggers那样提供'repeatCount'选项(bug:https://jira.terracotta.org/jira/browse/QTZ-242?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel)。显然这可以在版本2.2中修复,但我不能等待那么久,我也不相信我的问题是独一无二的!
我认为值得调查的几个选项:
计算CronTrigger的'EndTime'但使用我自己的逻辑 - 这不能涵盖所有可能的情况,即使对于简单的情况也只是近似。
使用TriggerListener或JobListener来跟踪号码。由于我只需要在'N'次迭代后停止工作,并且我从Job实例到Trigger的1:1映射,因此作业的迭代次数。在任何想象中,这似乎都不可行和/或有效。
你们中的任何一个人都可以选择使用CronTriggers吗?对于如何解决这个难题,请提供一些见解?
答案 0 :(得分:3)
似乎Quartz已经实现了一些可以提供帮助的东西:TriggerUtils.computeEndTimeToAllowParticularNumberOfFirings。
我还没有测试过,但这是我现在写的代码:
CronTrigger trigger = newTrigger()
.withSchedule(cronSchedule(cronExpression))
.build();
Date endDate = TriggerUtils.computeEndTimeToAllowParticularNumberOfFirings((OperableTrigger) trigger,
new BaseCalendar(Calendar.getInstance().getTimeZone()), 10);
trigger = trigger.getTriggerBuilder().endAt(endDate).build();
如果这不起作用,那么就像所说的here和here一样,你不能设置重复计数,你应该使用TriggerListener。
在任何情况下,2.2版都没有此功能。
<强>更新强>
我已经测试了它,但它确实有效。
答案 1 :(得分:0)
为什么不使用简单触发器?您可以在计划作业时计算时间间隔,但这将是一次性活动。