Java web应用程序中的Quartz与ScheduledExecutorService

Java web应用程序中的Quartz与ScheduledExecutorService,java,web-applications,quartz-scheduler,Java,Web Applications,Quartz Scheduler,对于当前在命令行上运行并使用的系统监控Java应用程序,我想编写一个简单的web应用程序版本,以类似或类似的方式运行 我已经读过关于作为web应用程序的流行工具之一的文章。将此应用程序从ScheduledExecutorService移植到Quartz是否更好(可能是因为更好的servlet容器集成) 向应用程序添加另一个库依赖项不是问题,我对使用ScheduledExecutorServiceScheduledExecutorService的技术原因感兴趣,ScheduledExecutorS

对于当前在命令行上运行并使用的系统监控Java应用程序,我想编写一个简单的web应用程序版本,以类似或类似的方式运行

我已经读过关于作为web应用程序的流行工具之一的文章。将此应用程序从
ScheduledExecutorService
移植到Quartz是否更好(可能是因为更好的servlet容器集成)


向应用程序添加另一个库依赖项不是问题,我对使用
ScheduledExecutorService

ScheduledExecutorService的技术原因感兴趣,ScheduledExecutorService的运行级别较低,您必须自己实现所有的调度监视/维护功能


Quartz具有诸如作业持久性、事务、集群等功能。这取决于您使用它的目的

石英适用于编程时间,例如每小时一小时


ScheduledExecutorService对于重复不必在特定时间发生的任务非常有用。它更简单,而且可能更有效。如果您有此功能,它向我表明您不需要石英。

Java的Executor解决方案允许您:

  • 立即运行任务
  • 在初始延迟后启动任务(并且可以选择在后续延迟周期后重新运行任务)
  • 但Quartz在何时以及多久运行一次任务/作业方面为您提供了难以置信的灵活性。例如,周一至周五工作周有一个时间表,而周末有其他安排(或根本没有)。或者在一个月的最后一天,你不必计算某个月的最后一天是28日、29日、30日还是31日。下面是cron样式的调度所适应的灵活性的更多示例-


    使用Java的库更容易,但是对于任何想要跳转到Quartz工作的简单代码库示例的人来说,我将这个模板放在一起供免费下载使用-

    我认为Java有API来执行Quartz的功能。我仍然不理解Quartz框架的必要性。Quartz允许您说您希望任务在小时内运行。e、 例如12:00、13:00等。内置的API允许您每小时运行一次(从某个点开始),但这会随着时间推移而漂移。(每天最多10秒)@Newbie No。您可以使用Java中的现代Java API,如Executors和Java.time来实现Quartz之类的工具,但这对您来说是一项艰巨的工作。Quartz有许多超出执行者之外的额外功能:各种时间段、触发器和侦听器、将作业持久化到数据库或其他存储、事务、故障转移和负载平衡等等。@PeterLawrey您确定Quartz不会随时间推移而漂移吗?有。防止时钟漂移不是一件小事,而且是一项很有价值的功能,因此我认为如果处理了它,它可能会在代码或文档中提到。@leventov AFAIK,它使用System.currentTimeMills()注意,对于周期性度量/监视任务,在分布式系统中创建,诸如此类,您应该非常小心,不要将任务运行或事件的序号解释为它发生的时间。否则这个问题可能会咬到你们。有关Java上下文中的详细讨论,请参阅。谢谢,很好的描述。那么石英的链接不起作用了,这是最新的一个(2.4.0)