【问题标题】:Quartz vs. ScheduledExecutorService in Java web applicationJava Web 应用程序中的 Quartz 与 ScheduledExecutorService
【发布时间】:2011-06-11 04:44:17
【问题描述】:

对于当前在命令行上运行并使用ScheduledExecutorService 的系统监控Java 应用程序,我想编写一个简单的Web 应用程序版本,以在Servlet container 中运行,例如Apache TomcatEclipse Jetty

我已经阅读了关于 Quartz 作为 Web 应用程序中流行的 job schedulers 之一的信息。将此应用程序从ScheduledExecutorService 移植到 Quartz 会更好(可能是因为更好的 servlet 容器集成)吗?

向应用程序添加另一个库依赖项不是问题,我对反对使用 ScheduledExecutorService 的技术原因感兴趣。

【问题讨论】:

  • 请注意,对于定期度量/监控任务,在分布式系统中创建"passage of time" events 等您应该非常小心,不要将任务运行的序号或事件解释为时间它发生了。否则clock drift 问题可能会咬你。有关 Java 上下文的详细讨论,请参阅 this blog post

标签: java web-applications quartz-scheduler


【解决方案1】:

这取决于您使用它的目的。

Quartz 对于编程时间很有用,例如每小时整点。

ScheduledExecutorService 对于重复不必在特定时间发生的任务很有用。它更简单,可能更有效。如果你有这个工作,它向我表明你不需要 Quartz。

【讨论】:

  • 我认为 java 具有执行 Quartz 功能的 API。我还是不明白 Quartz 框架的必要性。
  • Quartz 允许您说您希望任务按小时运行。例如12:00、13:00 等。内置的 API 允许您每小时运行一次(从某个时间点开始),但这会随着时间的推移而漂移。 (每天最多 10 秒)
  • @Newbie 不。你可以在 Java 中使用现代 Java API,例如 Executors 和 java.time 来实现像 Quartz 这样的工具,但是这对你来说将是很多工作。 Quartz 是richly-featured,除了 Executors 之外还有很多额外功能:各种时间段、触发器和侦听器、将作业持久化到数据库或其他存储、事务、故障转移和负载平衡等等。
  • @PeterLawrey 你确定 Quartz 不会随时间漂移吗?有no mentions for 'drift' in the project repository。防止时钟漂移不是微不足道的,而且是一个有价值的功能,所以我认为如果它被处理,它会在代码或文档中的某处被提及。
  • @leventov AFAIK,它使用 System.currentTimeMills()
【解决方案2】:

ScheduledExecutorService 在较低级别运行,您必须自己实施所有调度监控/维护设施。

Quartz 有tons of facilities,例如 Job Persistence、Transactions、Clustering 等。

【讨论】:

    【解决方案3】:

    Java 的 Executor 解决方案允许您:

    1. 立即运行任务
    2. 在初始延迟后启动任务(并可选择在后续延迟周期后重新运行任务)。

    但 Quartz 让您在运行任务/作业的时间和频率方面具有难以置信的灵活性。例如,周一至周五工作周有一个时间表,周末有其他(或根本没有)时间表。或者在一个月的最后一天,您不必确定给定月份的最后一天是在 28 日、29 日、30 日还是 31 日。以下是 cron 样式调度所提供的更多灵活性示例 - http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html#examples

    使用 Java 的库更容易,但对于任何想要快速开始使用 Quartz 的基本代码库示例的人,我已经将这个模板放在一起以供免费下载使用 - https://github.com/javateer/quartz-example

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多