quartz任务意外自动停止
项目上经常需要用到quartz来定时抓取数据,一个任务耗时6~24个小时不等,但是经常出现任务意外自动停止。请问有没有人遇到过?或者如何解决的?
业务场景是按照ID调用别人的接口数据,为了防止调用接口出现网络或数据异常,每抓取一个ID的数据最外层都使用了try..catch来进行捕获,目前只能看到的log是网络端口出现了504,但是我已经try.catch掉了,还是出现任务未执行完意外停止的情况,采用的版本是Spring3.0、quartz-1.5.2、jdk1.6,配置情况如下:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="updatePriceTigger" /> </list> </property> </bean> <bean id="updatePriceTigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="updatePriceJob" /> </property> <property name="cronExpression"> <value>0 0 9 * * ?</value> </property> </bean> <bean id="updatePriceJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="updatePriceTask" /> <property name="targetMethod" value="execute" /> <property name="concurrent" value="false" /> </bean>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
请问解决了吗?
任务本身不会意外停止,一般是由于任务里面的逻辑出现问题导致quartz停止,但是如果到了下一个时间点,还是会执行的
回复
也没怎么调整,后续貌似自己好了,^_^
个人认为肯定会有异常出现,建议把log4j设置成debug状态,观察一下有什么error
quartz 中处理出现异常,也不会停止吧,除非 tomcat停止了。所以,上面说人家没有正确处理异常的人,是没有碰到这个问题。我这边也碰到这个问题。
我使用2.2 版本的也有这 种情况 ,这是为什么? 新版本也不行?
意外停止,就是quartz任务进程停止执行,并且jvm还是正常的,tomcat也是正常的,而且quartz到了第二个执行时间点也未启动(可能是前一次任务还挂在哪里,并未标注任务执行完成)。 每抓取一条都会打印对应的ID,我调用对方的URL和解析数据都使用了Exception来捕获,如果出现异常,最多就是本条记录处理失败,继续下一条 另,昨天换了1.8的版本,从昨天中午12点到现在还是正常的,难道真是老版本的问题
最近也遇到了此问题,运行了几天的程序,被终止掉了,重启服务后正常。
回复
我也遇到了这个问题,程序好像卡住了,不往下执行了,怎么处理的?是程序的问题,还是Quarzt的问题呢?
怎么解决的
我也发现了这个问题 。请问你是怎么解决的? 能否把方式共享出来啊
我最近也出现类似问题。其他作业实例都能正常执行。只有一个周期性作业,但是并未按照周期执行。最外层也用try..catch来进行捕获,但是执行一段时间,真的仿佛这个作业终止了或者说消失了。因为通过添加的日志查看,之前每次执行都是完整的,方法前后均有输出。
将继续关注该问题。
注:我觉得没有什么事情是“意外”的,有可能你的异常处理不当没有捕获到而已。
有时会执行40个小时以上(根据对方接口网络性能而定,数据的准确性有要求),因为数据比较多,都已经分段4台机器刷了,集群功能貌似对线程意外停止没什么影响吧
回复
我觉得你这个“意外停止”的描述比较不太精确,如果任务执行抛出异常的话线程马上就终止了,你所谓的意外具体是指什么情况。还有你如何判断它是停止了,有没有可能是正在处理过程中呢?你可以使用SUN自带的JVM工具在线程意外终止的时候查看JVM内部的线程状态。有的时候由于并发处理不当可能导致线程死锁或被挂起的情况。
一个任务6~24小时,表示鸭梨巨大。建议还是首先优化任务处理的流程。如楼上所说,你的quartz版本太低了。
另注:quartz提供了集群功能,可防止单点故障的问题,google之。
暂时先将quartz版本升级为1.8.6跑2天试试