quartz定时任务突然不执行了
高并发情况下,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定时任务突然不执行了相关推荐
- quartz定时任务不执行
quartz定时任务执行一段时间不执行的原因 数据库表QRTZ_TRIGGERS 里的TRIGGER_STATE 字段的值自动修改为ERROR了 ,quartz定时任务是不扫描这种ERROR情况. 之 ...
- 记一次quartz定时任务不执行排雷
过程 项目中需求统计数据,涉及大屏展示,展示的数据很复杂,所以采取了晚上把数据汇总出来存到redis缓存,供白天查询的方式. 用到了quartz定时任务,写好sql.逻辑等测试没问题,就愉快的部署到了 ...
- 【Java Web】Quartz定时任务执行两次的解决方法
问题描述 如果选择定时任务,那么Quartz是一个不错的框架,但是在使用的过程中,莫名发现Quartz定时任务在指定时间被执行了两次. 问题原因 在Tomcat的配置文件conf/server.xml ...
- SpringBoot中实现quartz定时任务
Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...
- 定时任务重启后执行策略_quartz定时任务框架调度机制解析
quartz2.2.1集群调度机制调研及源码分析 引言 quartz集群架构 调度器实例化 调度过程 触发器的获取 触发trigger: Job执行过程: 总结: 附: 引言 quratz是目前最为成 ...
- 大数据互联网架构阶段 QuartZ定时任务+RabbitMQ消息队列
QuartZ定时任务+RabbitMQ消息队列 一 .QuartZ定时任务解决订单系统遗留问题 情景分析: 在电商项目中 , 订单生成后 , 数据库商品数量-1 , 但是用户迟迟不进行支付操作 , 这 ...
- Quartz定时任务的基本搭建
前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...
- Quartz定时任务-@DisallowConcurrentExecution注解
Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞. 在Spring中这时需要设置concurrent ...
- bboss quartz定时任务使用案例介绍
bboss quartz定时任务使用案例介绍 本文demo gradle工程源码地址: [url]https://github.com/bbossgroups/quartzdemo[/url] [si ...
最新文章
- 从事仪表专业学c语言有用吗,仪器仪表工程就业方向
- 乏善可陈的Neuralink
- php采集列表xml代码,php读取xml列表程序
- linux c/c++ 判断是否为中文(不包括中文符号,非正则)
- Docker网络模型(八)
- C++ 学习之旅(2)——链接器Linker
- 什么是Brouter?
- 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
- minSdkVersion、compileSdkVersion和targetSdkVersion
- Spring JDBC事务支持类jdbcTemplate(了解)
- 20款电脑码字软件,网络作家实用软件珍藏,首推橙瓜码字
- doctrine 事件
- 系统学习深度学习(四) --CNN原理,推导及实现源码分析
- CentOS8 图形界面和命令行切换
- libxml2剖析(3):使用教程
- 安全环保专题培训考试题
- 方便快捷!身份证OCR带你一秒录入
- 检测是否是ie浏览器及ie版本号
- 苹果A15仿生芯片集成150亿个晶体管,较A14增加近30%
- adobe xd_如何在Adobe XD中创建简历简历网站模板