1、首先看启动类注解 @EnableScheduling,进入注解内部,import了配置类 SchedulingConfiguration, 配置类引入ScheduleAnnoationBeanPostProcessor注解处理方法
2、ScheDuledAnnocationBeanPostProcessor 处理类,负责处理schedule注解。通过UML图,可以看到集成了BeanPostProcessor 后置处理器接口,必然会有其核心方法,
UML图:
3、调用后置处理方法postProcessAfterInitialization(Object bean, String beanName),进入方法,解析含有@scheduled注解类,得到annotatedMethod,随后调用this.processScheduled方法,
·
4、进入processScheduled 方法,方法内部,对corn类型,fixedDelayTask,fixedRateTask类型,进行处理存入scheduledTasks集合,
5、根据UML调用图 可以清晰看到实现了ApplicationListener 方法,在启动完成时会调用ScheduledAnnotationBeanPostProcessor 中的onApplicationEvent,调用finishRegistion方法
·
6、给线程池taskSchedule 赋值,调用registrar.agterPropertiesSet方法,调用this.scheduleCronTask方法,scheduledTask.future = this.taskScheduler.schedule(task.getRunnable(), task.getTrigger());
触发corn定时任务,其他类型同理。