Web应用程序中的Quartz

时间:2010-04-14 14:20:31

标签: java quartz-scheduler

我在Web应用程序中调度作业时遇到问题。如果我们必须在Web应用程序中安排作业,我们可以使用java util Timer / TimerTask或Quartz(还有其他调度机制,但我考虑过Quartz)。我正在考虑使用哪一个,当我点击网站http://oreilly.com/pub/a/java/archive/quartz.html?page=1时说使用计时器会产生不良影响,因为它会在最后一行创建一个超出容器控制范围的线程。其他页面讨论了Quartz及其功能,但我可以读到Quartz还使用线程和/或线程池来安排任务。我的猜测是这些线程也不在容器控件下

任何人都可以向我澄清这一点 在我的Web应用程序中使用Quartz而不创建挂起线程或线程锁定问题是否安全? 提前致谢

3 个答案:

答案 0 :(得分:2)

  

有人可以向我说明这一点在我的Web应用程序中使用Quartz而不创建挂起线程或线程锁定问题是否安全?

quartz和JDK Timer都启动了无法访问Java EE上下文信息的非托管线程,这是最大的问题。 此外,他们可以在没有[应用程序服务器]知道的情况下使用资源,在没有管理员控制其数量和资源使用的情况下存在,并阻碍应用程序服务器正常关闭或从故障中恢复资源的能力(见Unmanaged threads)。

说完了,我没有面对悬挂线程或锁定问题(我想这取决于你正在做什么)。

如果确实这是一个问题,请考虑使用JSR-237 Timer和WorkManager实现(适用于托管线程),如Foo-CommonJ,而不是石英或JDK Timer。

答案 1 :(得分:1)

两种方法都创建了非托管线程。我使用Quartz进行调度而不是java Timer,因为它提供了更多的灵活性(例如cron表达式),并且它更易于管理。

答案 2 :(得分:1)

如果我必须在一行中说,我会说使用Quartz,因为它将负责管理与您相关的低级别工作。使用Timer,你可以做石英所做的一切(甚至让定时器线程继续轮询以检查web应用程序是否正在运行,否则退出)。但这需要由您在代码中完成。使用Quartz,你可以开箱即用。

现在详情 Quartz提供 1.工作持久性 2.托管线程池,以便您创建适当数量的线程并在此之后使作业等待。 3.初始化servlet与Web应用程序集成。当应用程序关闭时,我认为它会关闭你的线程,但我还没有尝试过。所以我不会对此发表评论。 4.基于RMI的调度,适用于集群环境。

还有其他一些,但这些是人们更频繁使用石英的最大动力。