使用Thread.sleep(),Timer或platform cron作业在Java EE应用程序中进行定期操作

5 java scheduled-tasks java-ee

我有一个Java EE应用程序,每十五分钟从互联网上下载股票价格.从计时准确性的角度来看,最好是应用程序内化此定期操作,即Thread.sleep()与计数器结合使用或设置计时器或者通过URL公开任务并让平台cron作业定期点击URL更好(按照要求的频率).

这两种方法的优点和缺点是什么?

我看到针对OpenJDK实现报告的计时器错误让我感到震惊.该错误表明,系统时间的变化会影响与时间相关的操作和方法(如睡眠和计时器周期性)的操作.

Per*_*ion 1

一定要考虑使用为该任务构建的调度作业。尝试将任务本身与任何时间考虑因素分开。

  • 正如所建议的,石英是一个不错的选择。
  • Cron 还不错,但需要更多设置才能与您的任务集成。
  • 如果在 Java EE 上,您可以使用 EJB 计时器。
  • 您可以使用 ScheduledExecutorService 自行推出(不推荐)