【问题标题】:When to use Cron Job vs. ScheduledExecutorService何时使用 Cron Job 与 ScheduledExecutorService
【发布时间】:2014-11-14 07:44:03
【问题描述】:
我们的团队目前正在开发一个 Java 应用程序,该应用程序将有许多持续运行的处理线程(执行诸如从队列轮询之类的事情)。
与此应用程序相关的是,必须在某些预先确定的时间段(每天一次、每六小时一次等)运行一系列任务。我们团队的一些成员认为最好通过 cron 将这些任务作为独立进程执行,而另一些成员则认为最好将它们包含在通过 Java 的 ScheduledExecutorService 调度的当前应用程序中。是否有关于何时使用 cron 与内部 ScheduledExecutorService 的最佳实践,还是只是偏好问题?
【问题讨论】:
标签:
java
cron
scheduled-tasks
【解决方案1】:
使用ScheduledExecutorService 的优势在于您使用的是 100% java,因此如果您出于某种原因想要升级服务器/更改机器,则无需重新配置 cron 作业。此外,ScheduleExceutorService 还允许您使用Callable,因此您可以返回一些结果并在 java 中处理它们。
【解决方案2】:
使用 cron 的优势在于,您的运营团队可能对它很熟悉,并且您可以轻松地重新安排或暂停运营,而无需更改和重新部署应用程序。 (调度批量操作主要是操作团队的任务)
缺点是您需要在您的应用程序中提供一个可让 cron 作业调用的接口(如 REST 服务),或者该 cron 启动第二个 VM,在作业执行期间与您的应用程序并行运行。
我们目前正在从基于 Quartz 的内部调度转向 cron/REST 方法。
【解决方案3】:
我会投票支持单一职责原则:如果周期性任务可以作为独立的进程运行,独立于主应用程序,那么它们应该作为单独的进程运行。如果你把所有东西都扔进一个大袋子里,我的钱说你总有一天会后悔那个决定的。