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 对比图

3.3 Elastic-job

3.3.1 简介

3.4 XXL-job

3.4.1 简介

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值