Quartz调度数千个新工作

时间:2018-04-17 10:41:48

标签: java spring quartz-scheduler

如果我们反复安排工作,调度程序线程似乎不断被唤醒 所以它一直在运行它"找工作"查询,这是昂贵的 我们已经看到这个查询每秒运行很多次。

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

我挖了代码,发现QuartzScheduler.scheduleJob调用notifySchedulerThread
这使用布尔signalOnSchedulingChange来确定是否实际唤醒
我无法看到设置此布尔值的方法

请问推荐的方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了答案 您可以使用StdSchedulerFactory的自定义子类将signalOnSchedulingChange标志设置为false e.g。

    /**
     * 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);
        }
    }