今天测试来找我,说定时的策略任务不能运行了,或者有时候运行有时候不运行,很奇怪。之前都好好,百思不得其解。
后来发现多了一个定时任务类,且都是用的@Scheduled注解。
突然就恍然大悟,记得在哪里看到过,如果在多个函数上使用了@Scheduled,那么一定是一个执行完毕,才能排下一个。
然后发现某些时间点我的任务会被阻塞。
以下是两个定时任务类都用了这个注解的图。
解决方法如下,配置线程池,创建一个类配置,如下:
import java.util.concurrent.ScheduledThreadPoolExecutor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ThredConfig { @Bean public ScheduledThreadPoolExecutor scheduledExecutorService() { ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10); return executor; } }
这就是我踩的坑,学习的路上任重而道远。如有错漏,欢迎指正。