如何模拟’号 在Java中使用CronTriggers发生’或’重复计数’?

我正在使用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中修复,但我不能等待那么久,我也不相信我的问题是独一无二的!

我认为值得调查的几个选项:

  1. 计算CronTrigger的’EndTime’,但使用我自己的逻辑 – 这不能涵盖所有可能的情况,即使对于简单的情况也只是近似。

  2. 使用TriggerListener或JobListener来跟踪no。 由于我只需要在’N’次迭代后停止工作,并且我从Job实例到Trigger的1:1映射,因此工作的迭代。 这在任何想象中都不是非常可行和/或有效的。

你们中的任何一个人都可以选择使用CronTriggers吗? 对于如何解决这个难题,请提供一些见解?

似乎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(); 

如果这不起作用,那么就像这里和这里所说的那样,你不能设置重复计数,你应该使用TriggerListener。

无论如何,2.2版本没有此function。

更新

我测试了它,它的工作原理。

你不能使用简单触发器吗? 您可以在计划作业时计算时间间隔,但这将是一次性活动。