gpt4 book ai didi

java - 重复间隔不能为零

转载 作者:行者123 更新时间:2023-12-01 13:38:03 24 4
gpt4 key购买 nike

我正在努力将 Quartz 从 1.8.6 升级到 2.2.1。

在前面的代码中,我们创建了一个触发器,如下所示:

Trigger trigger = TriggerUtils.makeImmediateTrigger(0, 0);

这是以前有效的语法。然而,自 Quartz 2 以来,他们已经转向基于构建器的系统。下面是我认为可以完成同样的事情,但是,我收到错误重复间隔不能为零

Trigger trigger = newTrigger()
.withIdentity(getImmediateTriggerName(jobInfo))
.forJob(job)
.withSchedule(simpleSchedule()
.withIntervalInMilliseconds(0)
.withRepeatCount(-1))
.build();

显然这不起作用,所以我想知道完成我们之前所做的同样事情的最佳方法是什么。

谢谢

最佳答案

您似乎希望触发器只触发一次。

根据Quartz 1.8 source ,调用TriggerUtils.makeImmediateTrigger(0, 0)创建 SimpleTrigger重复计数为 0,重复间隔为 0。根据 Quartz 1.8 tutorial ,示例 1,这将创建一个仅触发一次的触发器。因此,这似乎就是您的 Quartz 1.8 代码所做的事情。

来自Quartz 2.2 TriggerBuilder API documentation :

[If] you do not invoke withSchedule(..) method, a default schedule of firing once immediately will be used.

所以,看来您所需要做的就是摆脱 withSchedule触发器部分:

Trigger trigger = newTrigger()
.withIdentity(getImmediateTriggerName(jobInfo))
.forJob(job)
.build();

我很欣赏 Quartz 1.8 文档对于重复计数并不完全清楚。 documentation for the Quartz 2.2 ScheduleBuilder在这一点上更清楚:重复计数不包括第一次射击。尽管看到您的代码尝试将重复计数设置为-1,但我不敢相信您实际上希望触发器永远不会触发,如 triggers are automatically deleted after they have repeated the required number of times ,并且创建触发器只是为了立即将其删除而不触发它是毫无意义的。事实上,如果将重复间隔设置为正数毫秒并将重复计数保留为 -1,you would get an error about the repeat count being negative .

关于java - 重复间隔不能为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com