一、定时任务默认是阻塞的

定时任务默认是阻塞的, 即串行执行,若一个服务配置多个定时任务,需要等上一个定时任务执行完,才能执行下一个定时任务

一个定时任务超长了,也不应该阻塞其他定时任务的执行。如一个定时任务每秒执行,而业务执行时间是5秒,那么会隔5秒等待业务执行完毕才会继续下一个定时任务。当前定时任务阻塞后,下一个定时任务得不到执行。


解决方案

  1. 业务运行以异步的方式,自己提交到线程池
CompletableFuture.runAsync(()->{xxxxService.hello();
},executor);
  1. SpringBoot支持定时任务线程池。默认情况定时任务自动配置的线程数量为1。直接更改配置文件的配置(经常失效
    spring.task.scheduling.pool.size=5
  2. 定时任务异步执行
    在类上加@EnableAsync。在定时方法上标上注解@Async

解决:使用异步+定时任务来完成定时任务不阻塞的功能

二、分布式定时任务需要解决的问题

服务有定时任务,当服务部署到多个节点时,每个节点在同一个时间点都会执行相同的定时任务,需要做的是,让同一个时间点,每一个定时任务只在一个节点上执行。

给定时任务加一个分布式锁,再在业务代码里面加上关于幂等的逻辑判断。

定时任务及分布式定时任务注意事项相关推荐

  1. 浅谈传统定时任务和分布式定时任务

    为什么用定时任务? 定时任务平台可以在后台自动检测数据并进行操作.主要应用在订单状态改变.后台统计.定时发送邮件或短信等. 定时任务怎么部署实现? 传统的定时任务可以通过可定时线程池.timertas ...

  2. java 项目初始化一个定时任务_elastic-job 分布式定时任务框架 在 SpringBoot 中如何使用(一)初始化任务并定时执行...

    第一篇需要实现一个最简单的需求:某个任务定时执行,多台机子只让其中一台机子执行任务 一.安装 分布式应用程序协调服务 zookeeper,安装步骤在链接里面 二.在springboot项目中引入 el ...

  3. 几种主流的分布式定时任务,你知道哪些?

    欢迎关注方志朋的博客,回复"666"获面试宝典 单点定时任务 JDK原生 自从JDK1.5之后,提供了ScheduledExecutorService代替TimerTask来执行定 ...

  4. quartz 分布式_6大分布式定时任务对比

    作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...

  5. 【解决方案】分布式定时任务解决方案

    [解决方案]分布式定时任务解决方案 参考文章: (1)[解决方案]分布式定时任务解决方案 (2)https://www.cnblogs.com/fonxian/p/10858101.html 备忘一下 ...

  6. 聊聊分布式定时任务中间件架构及其实现--转

    原文来自微信公众号:聊聊架构 在互联网应用中,各式各样的定时任务存于系统各个角落.我们希望由一个平台统一将这些作业管理起来.通过这个系统,作业的宕机.崩溃等状态就可收入运维同学掌控,直接对接报警系统, ...

  7. 3分钟掌握Quartz.net分布式定时任务的姿势

    长话短说,今天聊一聊分布式定时任务,我的流水账笔记: ASP.NET Core+Quartz.Net实现web定时任务 AspNetCore结合Redis实践消息队列 细心朋友稍一分析,就知道还有问题 ...

  8. 6大分布式定时任务对比

    作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...

  9. 基于spring+quartz的分布式定时任务框架

    http://www.cnblogs.com/aaronfeng/p/5537177.html 问题背景 我公司是一个快速发展的创业公司,目前有200人,主要业务是旅游和酒店相关的,应用迭代更新周期比 ...

  10. 【redis】分布式锁实现,与分布式定时任务

    如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...

最新文章

  1. HP笔记本 CQ41全系列系统解决方案
  2. linux c send recv MSG_NOSIGNAL参数
  3. android init(system/core/init/init.c)分析
  4. zip,tar,打包并压缩
  5. boost::contract模块实现虚拟可选结果的测试程序
  6. php 可以动态的new一个变量类名
  7. Netty完成网络通信(二)
  8. 前端学习(3234):react生命周期1
  9. 多浏览器下,CSS截断功能。
  10. 开源要安全!Linux 基金会、GitHub、GitLab、Google 联合起来了!
  11. ESFramework Demo -- 简单的网络硬盘Demo
  12. ab753变频器参数怎么拷贝到面板_20款常用变频器密码,想成为电工老师傅你一定需要,纯干货分享!...
  13. DSP 程序远程升级 / Bootloader设计指南(五)—— FLASH擦写操作
  14. BZOJ 4199: [Noi2015]品酒大会/UOJ #131. 【NOI2015】品酒大会 后缀自动机 树形dp / 后缀数组 单调栈
  15. 数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
  16. 一篇文章带你搞定 create connection SQLException, url: jdbc:mysql://10.15.16.63:3306/restful, errorCode 1130
  17. 高数————思维导图(上岸必备)(极限与连续)
  18. phpmailer 使用
  19. Python学习案例2——数独解题及出题程序
  20. 安装jupyter步骤

热门文章

  1. Arcgis计算矢量数据的面积
  2. Python数据处理(一)
  3. rabbitmq消息队列原理
  4. JAVA 获取音频文件(ogg格式)毫秒时长
  5. Idea终端中无法使用maven命令问题解决
  6. 微信小程序开发-轮播图的实现
  7. Kubernetes详细笔记
  8. 矩阵运算(一)最小二乘法
  9. rstudio教程 java_RStudio的使用教程
  10. 连接服务器显示用户账户无效,发现MT4真实账户无效该怎么办?