石英调度数以千计的新工作

Quartz scheduling thousands of new jobs

如果我们重复调度作业,调度程序线程似乎会不断被唤醒。
所以它保持 运行 宁它是 "find jobs" 查询,这是昂贵的。
我们已经看到这个查询每秒 运行ning 多次。

我们正在添加的所有工作将在未来 运行,例如7 天后。
所以我们不需要调度程序线程保持唤醒。

我深入研究了代码,发现 QuartzScheduler.scheduleJob 调用了 notifySchedulerThread
这使用布尔 signalOnSchedulingChange 来确定是否真正唤醒
不过我看不到设置此布尔值的方法

请问这里推荐的方法是什么?

我找到了这个问题的答案
您可以使用 StdSchedulerFactory
的自定义子类将 signalOnSchedulingChange 标志设置为 false 例如

    /**
     * Custom StdSchedulerFactory
     *
     * Sets signalOnSchedulingChange to false so the SchedulerThread does not wake on every scheduleJob
     */
    public class CustomStdSchedulerFactory extends StdSchedulerFactory {

        private static final Logger LOG = LoggerFactory.getLogger(CustomStdSchedulerFactory.class);

        @Override
        protected Scheduler instantiate(QuartzSchedulerResources rsrcs, QuartzScheduler qs) {

            LOG.info("setting signalOnSchedulingChange to false");
            qs.setSignalOnSchedulingChange(false);

            return super.instantiate(rsrcs, qs);
        }
    }