Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在指定的出现次数后停止quartz cron调度程序?_Java_Cron_Quartz Scheduler - Fatal编程技术网

Java 如何在指定的出现次数后停止quartz cron调度程序?

Java 如何在指定的出现次数后停止quartz cron调度程序?,java,cron,quartz-scheduler,Java,Cron,Quartz Scheduler,我有一个要求,用户可以设置一个结束日期,或可以设置一个特定的次数,然后停止任何作业 比如, 考虑到我必须发送短信到一个特定的号码,这应该从现在开始,短信将在每5分钟发送 现在,根据用户的选择,上述作业将在特定时间停止,或在n次出现后停止 我使用的是石英的cron调度程序 现在在一个特定的日期和时间停止它是很容易的,我已经这样做了如下方式 trigger = TriggerBuilder.newTrigger() .startAt(s

我有一个要求,用户可以设置一个结束日期,或可以设置一个特定的次数,然后停止任何作业

比如,

考虑到我必须发送短信到一个特定的号码,这应该从现在开始,短信将在每5分钟发送

现在,根据用户的选择,上述作业将在特定时间停止,或在n次出现后停止

我使用的是石英的cron调度程序

现在在一个特定的日期和时间停止它是很容易的,我已经这样做了如下方式

    trigger = TriggerBuilder.newTrigger()
                            .startAt(startDateObj)
                            .endAt(endDate)
                            .withIdentity(uniqueID, "group1")
                            .withSchedule(
                                    CronScheduleBuilder.cronSchedule(cronString)
                                )
                            .build();
但是,如果在n次事件发生后我必须停止它,该怎么办?我知道它可以通过简单的时间表来完成,比如

simpleSchedule().withRepeatCount(1).withIntervalInSeconds(15)
但是如何对cron调度器执行同样的操作呢?由于某些原因,我不能转换到除cron之外的任何其他类型的计划

任何帮助对我都会很好

如果需要更多数据,请告诉我


提前感谢。

您可以使用
computendtimetoallowparticularnumberoffirings()
方法计算
结束日期。(尽管是这个名字!)。
请参见以下示例:

CronTrigger=new trigger()
.Withintity(“某些id”)
.withSchedule(buildCronScheduler(“some\u cron\u exp”))
.build();
Date endDate=TriggerUtils.computeEndTime允许特定数量的字符串(
(可操作触发器)触发器,
新的BaseCalendar(Calendar.getInstance().getTimeZone()),
重复计数);
trigger=trigger.getTriggerBuilder().endAt(endDate.build();

不幸的是,没有直接的方法可以做到这一点。重复计数设置与SimpleTrigger接口相关,该接口不是CronTrigger的父接口。CrontTriggerImpl类不实现SimpleTrigger接口。正如您已经确定的,解决方法是根据重复次数计算结束日期,并以这种方式进行处理。或者,您可以跟踪作业执行的次数(可能在JobDataMap中),然后让作业在完成最后一次所需执行时移除触发器。感谢您将计数存储到JobDataMap idea中:D.早些时候,我正在考虑将数据存储到数据库中。