springboot的定时任务@schedule

导读:本篇文章讲解 springboot的定时任务@schedule,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、简介

             项目中使用了springboot的@schedule注解来执行定时任务。不过该注解不做特殊设置时是存在隐患的。该注解内部默认的是采用的一个线程的线程池来串行执行任务的。

springboot的定时任务@schedule

              这样就会出现隐患,一是  定义了俩个任务,A任务凌晨3点执行, B任务凌晨4点执行, 此时如果A任务执行时间为一个半小时,则B任务会一直阻塞到点半才会开始执行,而非定义的4点执行,这就造成了B任务没有定时执行的假象。还有一个隐患是 如果A任务执行过程中假死,则B任务和其它任务则会一直阻塞不执行,这就玩大发了。 

二、解决方法

             可以通过自定义定时执行任务的线程个数将串行改为并行即可,springboot可以通过添加如下配置类来解决:

@Configuration
@EnableAsync
public class AsyncConfig {

   /*
   此处成员变量应该使用@Value从配置中读取
   */
   private int corePoolSize = 10;
   private int maxPoolSize = 200;
   private int queueCapacity = 10;

   @Bean
   public Executor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(corePoolSize);
    executor.setMaxPoolSize(maxPoolSize);
    executor.setQueueCapacity(queueCapacity);
    executor.initialize();
    return executor;
   }

}

三、分布式任务调度框架(TODO)

3.1 引入原因

         如果少量服务器还好说,但是当大规模集群的时候,仅仅使用@schedule注解就不行了,这样无法看到任务是否执行完成,成功或失败,任务数量,任务分布,链路追踪等等等等。这时就需要引入分布式任务调度框架了。

3.2 分布式框架对比

3.2.1 对比图

springboot的定时任务@schedule

springboot的定时任务@schedule

springboot的定时任务@schedule

3.3 Elastic-job

3.3.1 简介

3.4 XXL-job

3.4.1 简介

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17740.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!