【发布时间】:2017-10-20 14:42:24
【问题描述】:
基本上,我正在使用 Quartz Scheduler 的实现,我希望多个作业同时运行,但有些作业应该在其他作业之前运行。为此,我找到了触发器的参数“优先级”。
假设我有 4 个工作,每个工作都有自己的触发器。我这样设置优先级: job1 - 优先级 5 工作 2 - 优先级 3 job3 - 优先级 11 job4 - 优先级 8
我希望它们按以下顺序运行:job3、job4、job、1、job2
在 20 次运行中,只有大约 3 次我得到了预期的结果。对于其他人来说,要运行的第一个任务几乎是随机的,其余的都是正确排序的。一次运行类似于:job1, job3, job4, job2 OR job4, job3, job1, job2
我是否没有正确理解 Quartz 中优先级的工作原理?我无法确切地找到正在发生的事情。
【问题讨论】:
-
你的线程池大小是多少?您是否遇到了要运行的任务多于可用线程的情况。如果所有作业都有相同的预定时间并且石英没有空闲线程来运行它们,那么所有优先级都会启动。
-
线程池大小为 1。我认为,就像在此示例中 quartz-scheduler.org/documentation/quartz-2.x/examples/… 一样,无论如何我都应该根据优先级运行任务
-
我们必须看两件事。 1)你的工作是如何安排的?您是否对所有作业都有相同的 cron 并期望它们同时触发,或者您是否使用诸如 intervalWithDelay 之类的东西来安排多次运行? 2) 查看 NextFireTime 的工作可能会给您更多的见解。只有当所有作业都安排在同一时间触发时,优先级才会出现。如果他们的触发时间不同,将选择调度时间最早的作业
-
他们有相同的 NextFireTime,我可以确认。如果您想查看问题,我会追踪问题并将其发布为答案。
标签: java triggers quartz-scheduler scheduler