springboot schedule定时任务,springboot scheduled不执行

  springboot schedule定时任务,springboot scheduled不执行

  

目录

解决办法1.将@已安排注释的方法内部改成异步执行2.把预定的配置成成多线程执行要注意什么坑

 

  不绕弯子了,直接说这个坑是啥:

  跳羚使用@已安排定时执行任务的时候是在一个单线程中,如果有多个任务,其中一个任务执行时间过长,则有可能会导致其他后续任务被阻塞直到该任务执行完成。也就是会造成一些任务无法定时执行的错觉

  可以通过如下代码进行测试:

  @Scheduled(cron=0/1 * * * *?)public void deleteFile()抛出中断的异常{日志。信息( 111删除成功,时间: 新日期()。toString());线程。睡眠(1000 * 5);//模拟长时间执行,比如超正析象管(图片Orthicon)操作,http请求} @Scheduled(cron=0/1 * * * *?)公共void同步文件(){ log。信息( 222同步成功,时间: 新日期()。toString());} /**输出如下:[池-1-线程-1]: 111删除成功,时间: 11月26日20:42:13 CST 2018[pool-1-thread-1]: 222同步成功,时间: 11月26日20:42:18 CST 2018[pool-1-thread-1]: 111删除上面的日志中可以明显的看到同步文件被阻塞了,直达删除文件执行完它才执行了而且从日志信息中也可以看出@已安排是使用了一个线程池中的一个单线程来执行所有任务的。**//**如果把Thread.sleep(1000*5)注释了,输出如下:[池-1-线程-1]: 111删除成功,时间: 11月26日20:48:04 CST 2018[pool-1-thread-1]: 222同步成功,时间: 11月26日20:48:04 CST 2018[pool-1-thread-1]: 222同步时间: 11月26日20:483:05 CST 2018[pool-1-thread-1]: 111删除成功,时间: 11月26日20:48:05 CST 2018[pool-1-thread-1]: 111删除成功,时间: 20:4833这下正常了**/

  

解决办法

 

  

1.将@Scheduled注释的方法内部改成异步执行

如下:

 

  //当然了,构建一个合理的线程池也是一个关键,否则提交的任务也会在自己构建的线程池中阻塞执行者服务=执行者。newfixedthreadpool(5);@Scheduled(cron=0/1 * * * *?)public void delete file(){ service。执行(()-{ log。信息( 111删除成功,时间: 新日期()。toString());试试{线程。睡眠(1000 * 5);//改成异步执行后,就算你再耗时也不会印象到后续任务的定时调度了} catch(中断异常e){ e . printstacktrace();} });} @Scheduled(cron=0/1 * * * *?)公共void同步文件(){ service。执行(()-{ log。信息( 222同步成功,时间: 新日期()。toString());});}

  

2.把Scheduled配置成成多线程执行

@ configuration public class schedule config实现scheduling configur { @ Override public void configure tasks(ScheduledTaskRegistrar taskRe GIS rar){//当然,这里设置的线程池是corePoolSize也是很重要的。根据业务需要设置task registrar . set scheduler(executors . newscheduledthreadpool(5));/* *为什么这么说?假设您有4个任务需要每1秒执行一次,其中三个是耗时的操作,可能需要10秒以上。而你上面的语句是这样写的:task registrar . set scheduler(executors . newscheduledthreadpool(3));那么最后一个任务可能还是被屏蔽了,不能定时执行* */}}就是这样。本文介绍了在SpringBoot中使用@scheduled执行任务的技巧。关于SpringBoot @scheduled定期执行任务的更多信息,请搜索热门IT的往期文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: