Spring使用之:Quartz定时任务为什么会被阻塞
来源:互联网 发布:暗影格斗2mac 编辑:程序博客网 时间:2024/05/22 07:51
周日,公司CTO给我打电话说,监控系统的数据从下午1点就不更新了。我登录服务器排除了数据同步问题,查看日志也没有例外抛出,查询了前一天的 日志发现几个数据库表空间溢出例外。最后定位,Spring定时任务挂掉了。重启应用恢复正常。周一早上,同样的问题又发生了,6点开始定时任务又停了。 Spring定时任务为什么会被阻塞呢?
原因:
周一中午,我在进行接口状态监控测试时发现,接口状态查询任务尽然会执行半小时。问题找到了,由于我在接口状态查询任务中没有设置读超时、在接口 网络繁忙时,接口状态查询任务会占用很长的时间,Spring定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行。接口状 态查询任务每5分钟执行一次,假如每次都执行1小时的话,其他任务就会被阻塞。因为Quartz的线程都被接口状态查询任务占用了。其他任务只有等待。
解决方法:
1.将JobDetail的concurrent属性配置为false。不允许任务并发执行。
2.任务执行时间较长时,查找根本问题。
实验:
JobOne.java
JobTwo.java
配置文件
MAIN类:
测试结果:
当jobOne的concurrent为true时:
execute JobOne(Thu Jan 24 13:40:22 CST 2008)
execute JobTwo(Thu Jan 24 13:40:22 CST 2008)
execute JobOne(Thu Jan 24 13:40:22 CST 2008)
execute JobTwo(Thu Jan 24 13:40:22 CST 2008)
execute JobOne(Thu Jan 24 13:40:23 CST 2008)
execute JobTwo(Thu Jan 24 13:40:23 CST 2008)
execute JobOne(Thu Jan 24 13:40:24 CST 2008)
execute JobTwo(Thu Jan 24 13:40:24 CST 2008)
execute JobOne(Thu Jan 24 13:40:25 CST 2008)
execute JobTwo(Thu Jan 24 13:40:25 CST 2008)
execute JobOne(Thu Jan 24 13:40:26 CST 2008)
execute JobTwo(Thu Jan 24 13:40:26 CST 2008)
execute JobOne(Thu Jan 24 13:40:27 CST 2008)
execute JobTwo(Thu Jan 24 13:40:27 CST 2008)
execute JobOne(Thu Jan 24 13:40:28 CST 2008)
execute JobTwo(Thu Jan 24 13:40:28 CST 2008)
execute JobOne(Thu Jan 24 13:40:29 CST 2008)
execute JobTwo(Thu Jan 24 13:40:29 CST 2008)
execute JobOne(Thu Jan 24 13:40:31 CST 2008)
(JobOne并发执行,到这里所有任务阻塞没有信息输出,可以看出默认有10个线程,都被JobOne占用)
当jobOne的concurrent为false时:
execute JobOne(Thu Jan 24 13:43:00 CST 2008)
execute JobTwo(Thu Jan 24 13:43:00 CST 2008)
execute JobTwo(Thu Jan 24 13:43:00 CST 2008)
execute JobTwo(Thu Jan 24 13:43:01 CST 2008)
execute JobTwo(Thu Jan 24 13:43:02 CST 2008)
execute JobTwo(Thu Jan 24 13:43:03 CST 2008)
execute JobTwo(Thu Jan 24 13:43:04 CST 2008)
execute JobTwo(Thu Jan 24 13:43:05 CST 2008)
execute JobTwo(Thu Jan 24 13:43:06 CST 2008)
execute JobTwo(Thu Jan 24 13:43:07 CST 2008)
execute JobTwo(Thu Jan 24 13:43:08 CST 2008)
execute JobTwo(Thu Jan 24 13:43:09 CST 2008)
(JobOne不并发执行,JobTwo不会被阻塞)
- Spring使用之:Quartz定时任务为什么会被阻塞
- Spring使用之:Quartz定时任务为什么会被阻塞
- Spring使用之:Quartz定时任务为什么会被阻塞
- spring quartz定时下载ftp文件任务被阻塞
- Spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- Spring-定时任务之Quartz
- Spring定时任务之Quartz
- Spring定时任务之Quartz
- 【JAVA秒会技术之搞定Quartz定时任务】Quartz在Spring中的集成与应用
- spring实现定时任务之Quartz 1
- spring实现定时任务之Quartz 2
- C++string类常用函数 c++中的string常用函数用法总结
- PHP接口开发
- github优秀开源项目大全-iOS
- fork和pause等系统调用的实现原理(Linux0.11内核)
- Android武器库
- Spring使用之:Quartz定时任务为什么会被阻塞
- 前端安全
- java反射机制浅析
- 2016多校训练Contest5: 1010 Prefix hdu5790
- metalab导入不同的文件
- 半平面交
- dp与px转换工具类
- Python的logging模块在Django中的应用
- dubbo集群配置