【问题标题】:Quartz in WebapplicationWeb 应用程序中的 Quartz
【发布时间】:2010-04-14 14:20:31
【问题描述】:

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

谁能给我解释一下 在我的 Web 应用程序中使用 Quartz 是否安全而不会产生挂起线程或线程锁定问题? 在此先感谢

【问题讨论】:

    标签: java quartz-scheduler


    【解决方案1】:

    任何人都可以向我澄清这一点吗?在我的 Web 应用程序中使用 Quartz 是否安全,而不会产生挂起线程或线程锁定问题?

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

    话虽如此,我并没有遇到挂线或锁定问题(不过我想这取决于你用它们做什么)。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果我不得不在一行中说,我会说使用 Quartz,因为它会为您管理与调度相关的低级工作。使用 Timer,您可以做一切石英所做的事情(甚至让计时器线程不断轮询以检查 Web 应用程序是否正在运行并退出)。但这需要您在您的代码中完成。有了 Quartz,您可以开箱即用。

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

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

        【讨论】:

          猜你喜欢
          • 2011-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-03
          • 1970-01-01
          • 2015-05-28
          相关资源
          最近更新 更多