如果我们反复安排工作,调度程序线程似乎不断被唤醒 所以它一直在运行它"找工作"查询,这是昂贵的 我们已经看到这个查询每秒运行很多次。
我们正在添加的所有工作将在未来运行,例如7天后。
所以我们不需要调度程序线程来保持醒来。
我挖了代码,发现QuartzScheduler.scheduleJob调用notifySchedulerThread
这使用布尔signalOnSchedulingChange来确定是否实际唤醒
我无法看到设置此布尔值的方法
请问推荐的方法是什么?
答案 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);
}
}