问题: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点运行。