@schedule 注解 是springboot 常用的定时任务注解,虽然方便,但是使用不当,还是会有问题;比如有些同学会遇到自己写的定时任务未在规定时间执行,或者延迟很长时间才执行。。
其实根本的原因是由于schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的,只有等待上个任务执行完之后,才会继续执行其他任务。我们来看下面的例子
上图可以看出,有两个定时任务,但是线程名称是一样的,SyncTask2在SyncTask后执行,显然SyncTask2受到SyncTask的影响。那该怎么解决呢?别急,看下面内容
重新配置schedule,改为多线程执行, 实现SchedulingConfigurer这个接口,重写configureTasks方法,设置线程池大小
上图可以看出,定时任务的线程名称不同,代表我们修改的代码是正确的