問題:stat.schedule.cron=0 0 8 * * ? 設置每天8點執行,debug時,看log發現並未執行,但0/5 * * * * ? 每五秒可以正常執行
問題代碼:
properties配置: stat.schedule.enable=true stat.schedule.cron=0 0 8 * * ? @Service @ConditionalOnExpression(value = "${stat.schedule.enable:false}") @Slf4j public class StatService { @Bean public TaskScheduler poolScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setThreadNamePrefix("poolScheduler"); scheduler.setPoolSize(5); return scheduler; } @Scheduled(cron = "${stat.schedule.cron}") public void test() { log.info("cron start"); }}
排查:
1)從啓動日誌看,已經初始化了線程池
[o.s.s.c.ThreadPoolTaskScheduler.java:165] : [][][] Initializing ExecutorService 'poolScheduler'
2)加@EnableScheduling,@Laze(false)等,問題依舊
解決: @Scheduled(cron = "${stat.schedule.cron}", zone = "GMT+8")
反思:時區問題,默認UTC,實際定時任務已啓動,但未按預期執行。未加zone時,測試stat.schedule.cron=0 0 8 * * ?改爲stat.schedule.cron=0 0 0 * * ?,實際在北京時間早晨8點運行。