2010-08-24 233 views
6

我想找到最好的方式来实现石英超时,但我想知道如果这个框架已经包含一个类或接口来做到这一点。需要实现它的超时是因为我想知道工作已经工作了多长时间,并且关掉了工作。如何用Quartz实现超时?

+0

试试endTime参数吗? http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson05.html – Sean 2010-08-24 14:45:55

+0

嗨,感谢您的询问,我真的没有使用过,因为我认为这个参数只是在某个时间结束工作。我想知道这项工作做了多长时间以避免无限循环 – Jorge 2010-08-24 14:51:32

+0

好的,所以您正在寻找一种方法来跟踪调度器的正常运行时间,然后超时。尝试查看听众的文档。我没有使用它们,但它们看起来像是监视应用程序运行状态/时间的合理选择。 – Sean 2010-08-24 15:10:04

回答

8

由于java平台不提供任何方法来停止线程,Quartz不提供任何方式来停止在线程上执行的作业。

作业需要自己照顾自己,因为Quartz不知道execute()方法中的代码是什么。

我建议在工作开始时使用System.currentTimeMillis()execute()方法记录当前时间,然后每次通过作业的主循环时再次使用它来获取当前时间。看看它们的差异,看看你的最大时间是否已经过去,如果超过了你的主循环并退出execute()方法。

+1

另请参阅InterruptableJob界面。 JobListener接口为您提供了一些工具,可以将一些简单的功能添加到满足您需求的框架中。 – jhouse 2011-07-15 13:51:05