南充做网站多少钱/网页制作培训教程
springboot是如何实现定时任务的?
大白话
springboot扫描spring中所有的bean如果对象的方法上有@Scheduled的注解,则拉取注解中的时间相关信息,将bean以及方法分装成runnable对象,将时间信息以及runnable对象放入
ScheduledThreadPoolExecutor任务线程池中,时间一到则执行任务(反射实现)。
一切的入口@EnableScheduling注解。
每个spring容器中的bean对象初始化后都要做一波检测是否方法有@Scheduled注解。
开始封装方法对象以及执行的时间,注册到ScheduledTaskRegistrar。
@Scheduled注解里面定时任务种类很多,这里主要以分析cron表达式做列子分析。
ScheduledAnnotationBeanPostProcessor 实现类spring监听器接口,在容器初始化后调用相关方法结束注册。
在finishRegistration方法中调用taskRegister的afterPropertiesSet
再次走到scheduleCronTask方法
再次封装runnable对象并且放入定时任务线程池