如果我们反复安排作业,调度程序线程似乎会被不断唤醒。
因此,它继续运行它的“查找作业”查询,这是非常昂贵的。
我们看到这个查询每秒运行很多次。
我们增加的所有工作都将在未来运行,例如7天后。
所以我们不需要调度器线程来保持清醒。
我深入研究了代码,发现了QuartzScheduler.scheduleJob调用notifySchedulerThread。
这使用布尔signalOnSchedulingChange来确定是否真正唤醒。
不过,我看不出有什么办法来设置这个布尔值
请问这里推荐的方法是什么?
发布于 2018-04-23 08:32:47
我找到了答案
可以使用自定义的signalOnSchedulingChange子类将StdSchedulerFactory标志设置为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);
}
}https://stackoverflow.com/questions/49875966
复制相似问题