SpringBoot中定时任务执行的坑

在sb中,支持多种定时执行模式(cron, fixRate, fixDelay),开启也非常简单:

1、在Application或者其他Autoconfig上

@EnableScheduling

2、在需要定时执行的函数上

@Scheduled(fixedDelayString = "${config.timeInMs}")
@Scheduled(cron = "${config.cronStr}")

不过这里有个小坑,默认这个schedule只使用一个线程

如果你在多个函数上使用了@Scheduled,那么一定是一个执行完毕,才能排下一个。这往往不是我们想要的效果。

可以这么搞:

@Configuration
@EnableScheduling
public class SchedulingConfiguration {
 
    // 给sched用的,默认只有1个,时间太长会阻塞
    @Bean(destroyMethod = "shutdown")
    public Executor taskScheduler() {
        return Executors.newScheduledThreadPool(3);
    }
}

搞完之后,多个@Scheduled可以并发执行了,最高并发度是3,但是同一个@Schedule不会并发执行。很智能了。

原文 

https://www.coder4.com/archives/6023

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » SpringBoot中定时任务执行的坑

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址