高并发情况下,quartz定时任务突然不执行了,
背景:
整个项目架构,高并发操作比较多,
有多个线程池,周期线程池,和定时任务,占用多个资源
导致现场出现定时任务走一段时间就不走的情况
当前定时任务配置的是单线程(concurrent 属性值false)
排查过程:
利用Java VisualVM (windows操作系统)
查看现场线程日志和堆日志,没结果
线程数没有达到中间件配置的顶峰,应用日志也没有报错
进一步查应用源码,发现在定时任务中进行了http请求,排查是否写了超时时间,超时时间15秒,也没问题,
最后猜测是quartz本身的bug,因为我用的是quartz1.6.1,配置的执行时间是10秒一次,然后你的每次任务执行的时间都超过10秒之后,定时任务就一直往后延迟时间,等你当前任务完成后,再过10秒再执行,
修改方案,一个馊注意---------把时间改长一点,写30秒,或者1分钟,目前看现场问题解决好一些的方案,就是升级版本1.6.3
另外,我的思路是,可否给定时任务加个超时时间,就是每个任务执行时间超过一定值,就杀死这个任务,执行下一个任务,最后发现定时任务没有超时机制
另寻其他方法:
利用周期线程池ScheduledExecutorService ,和Future接口的get方法设置超时时间,亲测有效
(@PostConstruct注解,配置方法在类加载的时候执行,)

@Component
public class MyScheduledExecutorService {private ScheduledExecutorService sendExecutor;@PostConstruct//Spring加载这个类的时候执行一次private void init() {ScheduledExecutorService service = Executors.newScheduledThreadPool(1);service.scheduleAtFixedRate(new Runner(), 0, 20, TimeUnit.SECONDS);}private static final Log logger = LogFactory.getLog(DelaySendSmsZg.class);public static void task() {//你的业务}private static class Caller implements Callable<String> {@Overridepublic String call() {try {taskSend();return "";} catch (Exception e) {e.printStackTrace();}return null;}}private static class Runner implements Runnable {@Overridepublic void run() {ExecutorService excutor = Executors.newSingleThreadExecutor();Future<String> future = excutor.submit(new Caller());try {future.get(20, TimeUnit.SECONDS);// 超过20秒没执行完,直接终止} catch (TimeoutException e) {logger.info("xx超时");} catch (Exception e) {e.printStackTrace();} finally {excutor.shutdownNow(); // 强制终止任务}}}public static void main(String[] args) {ScheduledExecutorService service = Executors.newScheduledThreadPool(1);service.scheduleAtFixedRate(new Runner(), 0, 1, TimeUnit.SECONDS);}}

quartz定时任务突然不执行了相关推荐

  1. quartz定时任务不执行

    quartz定时任务执行一段时间不执行的原因 数据库表QRTZ_TRIGGERS 里的TRIGGER_STATE 字段的值自动修改为ERROR了 ,quartz定时任务是不扫描这种ERROR情况. 之 ...

  2. 记一次quartz定时任务不执行排雷

    过程 项目中需求统计数据,涉及大屏展示,展示的数据很复杂,所以采取了晚上把数据汇总出来存到redis缓存,供白天查询的方式. 用到了quartz定时任务,写好sql.逻辑等测试没问题,就愉快的部署到了 ...

  3. 【Java Web】Quartz定时任务执行两次的解决方法

    问题描述 如果选择定时任务,那么Quartz是一个不错的框架,但是在使用的过程中,莫名发现Quartz定时任务在指定时间被执行了两次. 问题原因 在Tomcat的配置文件conf/server.xml ...

  4. SpringBoot中实现quartz定时任务

    Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...

  5. 定时任务重启后执行策略_quartz定时任务框架调度机制解析

    quartz2.2.1集群调度机制调研及源码分析 引言 quartz集群架构 调度器实例化 调度过程 触发器的获取 触发trigger: Job执行过程: 总结: 附: 引言 quratz是目前最为成 ...

  6. 大数据互联网架构阶段 QuartZ定时任务+RabbitMQ消息队列

    QuartZ定时任务+RabbitMQ消息队列 一 .QuartZ定时任务解决订单系统遗留问题 情景分析: 在电商项目中 , 订单生成后 , 数据库商品数量-1 , 但是用户迟迟不进行支付操作 , 这 ...

  7. Quartz定时任务的基本搭建

    前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...

  8. Quartz定时任务-@DisallowConcurrentExecution注解

    Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞. 在Spring中这时需要设置concurrent ...

  9. bboss quartz定时任务使用案例介绍

    bboss quartz定时任务使用案例介绍 本文demo gradle工程源码地址: [url]https://github.com/bbossgroups/quartzdemo[/url] [si ...

最新文章

  1. 从事仪表专业学c语言有用吗,仪器仪表工程就业方向
  2. 乏善可陈的Neuralink
  3. php采集列表xml代码,php读取xml列表程序
  4. linux c/c++ 判断是否为中文(不包括中文符号,非正则)
  5. Docker网络模型(八)
  6. C++ 学习之旅(2)——链接器Linker
  7. 什么是Brouter?
  8. 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
  9. minSdkVersion、compileSdkVersion和targetSdkVersion
  10. Spring JDBC事务支持类jdbcTemplate(了解)
  11. 20款电脑码字软件,网络作家实用软件珍藏,首推橙瓜码字
  12. doctrine 事件
  13. 系统学习深度学习(四) --CNN原理,推导及实现源码分析
  14. CentOS8 图形界面和命令行切换
  15. libxml2剖析(3):使用教程
  16. 安全环保专题培训考试题
  17. 方便快捷!身份证OCR带你一秒录入
  18. 检测是否是ie浏览器及ie版本号
  19. 苹果A15仿生芯片集成150亿个晶体管,较A14增加近30%
  20. adobe xd_如何在Adobe XD中创建简历简历网站模板

热门文章

  1. MAC OS系统忘记密码怎么办?
  2. 北京邮电大学计算机视觉博士,北京邮电大学团队蝉联计算机视觉领域COCO挑战赛冠军...
  3. Python爬取表情包
  4. 华为天才少年带着机械臂回归:远程给葡萄缝针,成本仅1万元!
  5. python环境代码环境安装使用Anaconda3和pychram
  6. 莫烦python教程_python实现各种最优化算法
  7. for循环1到100的累加和
  8. 核验大量数据是否重复
  9. json插件下载 java_Eclipse Json Editor Plugin
  10. 携手共赢 决胜2021——芯讯通全球合作伙伴大会