1.主要实现类ScheduledAnnotationBeanPostProcessor
在postProcessAfterInitialization(Object bean,String beanName)方法中找到所有bean中有注解为@Scheduled的方法,组装成task,添加到调度线程池中
2.Task先按线程池接口类型TaskScheduler去容器中寻找taskScheduler,
如果只有一个这样的bean那么调度线程池就是这个
如果找到多个这样的bean则要按固定的bean名字(taskScheduler)去找这个调度线程池。
如果按类型TaskScheduler去容器中寻找不到,则用类型scheduledExecutorService去寻找,多个则也按名字去找。
如果都没有找到,则用Executors.newSingleThreadScheduledExecutor()生成的调度线程池,此线程池核心数为1,线程名前辍默认的是scheduling-。
3.自定义TaskScheduler时指定线程名的前辍(默认的是beanName+"-"),方便排查问题
threadPoolTaskScheduler.setThreadNamePrefix("Scheduler-");