最近,线上运行的定时任务出现调度失败。调整了相关参数后,虽然遏制了调度失败的情况,却导致任务调度的延迟极度增加。同时还观察到,在多机部署的环境中,负载极不均匀,于是深入代码排查一番。
TL; DR
- 不要使用 Spring 提供的
org.springframework.scheduling.quartz.SchedulerFactoryBean#setTaskExecutor
方法自定义工作线程池 - 要注意 Spring 与 Quartz 的部分配置默认值不一致,如
org.quartz.threadPool.class
- 一般情况下使用 Quartz 提供的
SimpleThreadPool
配合参数org.quartz.threadPool.threadCount
调整最大线程数即可 - 如果需要自定义工作线程池,则必须直接实现
org.quartz.spi.ThreadPool
接口,并一定要实现 (更多…)