如何监控Quartz是否在正常运行 英文

966,690 四月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
Quartz 2.0支持Fluent Configuration API和工作调度的监控了
Quartz 2.0支持Fluent Configuration API和工作调度的监控了
日. 估计阅读时间:
不到一分钟
道AI风控、Serverless架构、EB级存储引擎,尽在!
Author Contacted
相关厂商内容
相关赞助商
GMTC北京-10日,北京&国际会议中心,
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。Spring使用之:Quartz定时任务为什么会被阻塞 - fhqllt - ITeye技术网站
博客分类:
周日,公司CTO给我打电话说,监控系统的数据从下午1点就不更新了。我登录服务器排除了数据同步问题,查看日志也没有例外抛出,查询了前一天的日志发现几个数据库表空间溢出例外。最后定位,Spring定时任务挂掉了。重启应用恢复正常。周一早上,同样的问题又发生了,6点开始定时任务又停了。Spring定时任务为什么会被阻塞呢?
周一中午,我在进行接口状态监控测试时发现,接口状态查询任务尽然会执行半小时。问题找到了,由于我在接口状态查询任务中没有设置读超时、在接口网络繁忙时,接口状态查询任务会占用很长的时间,Spring定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行。接口状态查询任务每5分钟执行一次,假如每次都执行1小时的话,其他任务就会被阻塞。因为Quartz的线程都被接口状态查询任务占用了。其他任务只有等待。
解决方法:
1.将JobDetail的concurrent属性配置为false。不允许任务并发执行。
2.任务执行时间较长时,查找根本问题。
JobOne.java
package test.&&
import java.util.D&&
public class JobOne {&&
&&& public void execute(){&&
&&&&&&& System.out.println("execute JobOne("+new Date()+")");&&
&&&&&&& try {&&
&&&&&&&&&&& Thread.sleep(1000000);&&
&&&&&&& }catch(InterruptedException ire) {&&
&&&&&&&&&&&&&&
&&&&&&& }&&
package test.
import java.util.D
public class JobOne {
public void execute(){
System.out.println("execute JobOne("+new Date()+")");
Thread.sleep(1000000);
}catch(InterruptedException ire) {
JobTwo.java
package test.&&
import java.util.D&&
public class JobTwo {&&
&&& public void execute(){&&
&&&&&&& System.out.println("execute JobTwo("+new Date()+")");&&
package test.
import java.util.D
public class JobTwo {
public void execute(){
System.out.println("execute JobTwo("+new Date()+")");
&?xml version="1.0" encoding="UTF-8"?&&
&beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&
&&&&&& xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"&
&&&&&& xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-&&
beans-2.0.xsd&&
&&&&&&&&&&& http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd&&
&&&&&&&&&&& http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"&&
&&& &!--===== jobOne =====--&&
&&& &!-- job --&&
&&& &bean id="jobOne" class="test.job.JobOne" &&
&&&&&&&&&&
&&& &/bean&&
&&& &!-- job detail --&&
&&& &bean id="jobOneDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&&
&&&&&&& &property name="targetObject" ref="jobOne"/&&
&&&&&&& &property name="targetMethod" value="execute"/&&
&&&&&&& &property name="concurrent" value="true" /&&
&&& &/bean&&
&&& &!-- Trigger --&&
&&& &bean id="jobOneSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&&
&&&&&&& &property name="jobDetail" ref="jobOneDetail" /&&
&&&&&&& &property name="startDelay"&&value&0&/value&&/property&&
&&&&&&& &property name="repeatInterval"&&value&1000&/value&&/property&&
&&& &/bean&&
&&& &!--===== jobTwo =====--&&
&&& &!-- job --&&
&&& &bean id="jobTwo" class="test.job.JobTwo" &&
&&&&&&&&&&
&&& &/bean&&
&&& &!-- job detail --&&
&&& &bean id="jobTwoDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&&
&&&&&&& &property name="targetObject" ref="jobTwo"/&&
&&&&&&& &property name="targetMethod" value="execute"/&&
&&&&&&& &property name="concurrent" value="true" /&&
&&& &/bean&&
&&& &!-- Trigger --&&
&&& &bean id="jobTwoSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&&
&&&&&&& &property name="jobDetail" ref="jobTwoDetail" /&&
&&&&&&& &property name="startDelay"&&value&0&/value&&/property&&
&&&&&&& &property name="repeatInterval"&&value&1000&/value&&/property&&
&&& &/bean&&
&&& &!--===== Schedule =====--&&
&&& &!-- schedule --&&
&&& &bean& class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&&
&&&&&&& &property name="triggers"&&
&&&&&&&&&&& &list&&
&&&&&&&&&&&&&&& &ref local="jobOneSimpleTrigger"/&&
&&&&&&&&&&&&&&& &ref local="jobTwoSimpleTrigger"/&&
&&&&&&&&&&& &/list&&
&&&&&&& &/property&&
&&& &/bean&&
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
&&&&&& xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
&&&&&& xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
&&&&&&&&&&& http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
&&&&&&&&&&& http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"&
&&& &!--===== jobOne =====--&
&&&
&&& &!-- job --&
&&&
&&& &bean id="jobOne" class="test.job.JobOne" &
&&&&&&&
&&& &/bean&
&&&
&&& &!-- job detail --&
&&&
&&& &bean id="jobOneDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&&&&&&& &property name="targetObject" ref="jobOne"/&
&&&&&&& &property name="targetMethod" value="execute"/&
&&&&&&& &property name="concurrent" value="true" /&
&&& &/bean&
&&&
&&& &!-- Trigger --&
&&&
&&& &bean id="jobOneSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&
&&&&&&& &property name="jobDetail" ref="jobOneDetail" /&
&&&&&&& &property name="startDelay"&&value&0&/value&&/property&
&&&&&&& &property name="repeatInterval"&&value&1000&/value&&/property&
&&& &/bean&
&&&
&&& &!--===== jobTwo =====--&
&&&
&&& &!-- job --&
&&&
&&& &bean id="jobTwo" class="test.job.JobTwo" &
&&&&&&&
&&& &/bean&
&&&
&&& &!-- job detail --&
&&&
&&& &bean id="jobTwoDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&&&&&&& &property name="targetObject" ref="jobTwo"/&
&&&&&&& &property name="targetMethod" value="execute"/&
&&&&&&& &property name="concurrent" value="true" /&
&&& &/bean&
&&&
&&& &!-- Trigger --&
&&&
&&& &bean id="jobTwoSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&
&&&&&&& &property name="jobDetail" ref="jobTwoDetail" /&
&&&&&&& &property name="startDelay"&&value&0&/value&&/property&
&&&&&&& &property name="repeatInterval"&&value&1000&/value&&/property&
&&& &/bean&
&&&
&&& &!--===== Schedule =====--&
&&
&&& &!-- schedule --&
&&&
&&& &bean& class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&&&&&&& &property name="triggers"&
&&&&&&&&&&& &list&
&&&&&&&&&&&&&&& &ref local="jobOneSimpleTrigger"/&
&&&&&&&&&&&&&&& &ref local="jobTwoSimpleTrigger"/&
&&&&&&&&&&& &/list&
&&&&&&& &/property&
&&& &/bean&
&&&
package test.&&
import org.springframework.context.ApplicationC&&
import org.springframework.context.support.ClassPathXmlApplicationC&&
public class JobTest {&&
&&& private& ApplicationC&&
&&& public JobTest(ApplicationContext ac) {&&
&&&&&&& this.ac =&&
&&&& * @param args&
&&& public static void main(String[] args) {&&
&&&&&&& JobTest job = new JobTest(new ClassPathXmlApplicationContext("applicationContext.xml"));&&
&&&&&&&&&&
package test.
import org.springframework.context.ApplicationC
import org.springframework.context.support.ClassPathXmlApplicationC
public class JobTest {
private& ApplicationC
public JobTest(ApplicationContext ac) {
* @param args
public static void main(String[] args) {
JobTest job = new JobTest(new ClassPathXmlApplicationContext("applicationContext.xml"));
测试结果:
当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不会被阻塞)
4 楼 雁行 && 引用
我们jobdetail用的是org.springframework.scheduling.quartz.JobDetailBean
可以设置超时时间
不过从某种意义上来说,不如并发设置为false好些。
3 楼 wangrui && 引用
任务的时间超不超过定时器的间隔,我觉得编程时无法决定,或者说你认为它不会,实际什么情况都会发生。我这个系统运行了半年了也没出现问题。可是还是出了这样的问题。设计时还是应该好好考虑,如果任务不需要并发就将concurrent设为false比较保险。
2 楼 jones && 引用
implements StatefulJob使Job成为有状态的,顺序执行
1 楼 agile_boy && 引用
执行任务的时间不应该超过定时器的间隔吧,否则就会发生阻塞。
浏览: 612722 次
来自: 郑州
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...自定义监控快速入门_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
自定义监控快速入门
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 为保证设备的正常运行 的文章

 

随机推荐