Java 何时使用Cron作业与ScheduledExecutorService

Java 何时使用Cron作业与ScheduledExecutorService,java,cron,scheduled-tasks,Java,Cron,Scheduled Tasks,我们的团队目前正在开发一个Java应用程序,该应用程序将有许多连续运行的处理线程(执行诸如从队列轮询之类的操作) 与此应用程序相关,有一系列任务必须在一些预先确定的时间段(每天一次、每六小时一次等)运行。我们团队的一些成员认为,最好通过cron作为独立进程执行这些任务,而其他人则认为,最好只将它们包含在通过Java的ScheduledExecutorService调度的当前应用程序中。关于何时使用cron与内部ScheduledExecutorService,是否有最佳实践,或者这仅仅是一个偏好

我们的团队目前正在开发一个Java应用程序,该应用程序将有许多连续运行的处理线程(执行诸如从队列轮询之类的操作)


与此应用程序相关,有一系列任务必须在一些预先确定的时间段(每天一次、每六小时一次等)运行。我们团队的一些成员认为,最好通过cron作为独立进程执行这些任务,而其他人则认为,最好只将它们包含在通过Java的ScheduledExecutorService调度的当前应用程序中。关于何时使用cron与内部ScheduledExecutorService,是否有最佳实践,或者这仅仅是一个偏好问题?

使用ScheduledExecutorService的优点是,您使用的是100%java,因此,如果出于某种原因想要升级服务器/更改机器,则无需重新配置cron作业。此外,ScheduleExcutorService还允许您使用可调用的,因此您可以返回一些结果并用java进行处理。

使用cron的优点是,您的操作团队可能熟悉它,并且您可以轻松地重新安排或暂停操作,而无需更改和重新部署应用程序。(安排批处理操作主要是操作团队的任务)

缺点是在应用程序中需要cron作业可以调用的接口(如REST服务),或者cron启动第二个VM,在作业执行期间与应用程序并行运行


我们目前正在从基于Quartz的内部调度转向cron/REST方法。

我将投票支持单一责任原则:如果周期性任务可以作为独立于主应用程序的独立进程运行,那么它们应该作为独立进程运行。如果你把所有的东西都扔进一个大袋子里,我的钱说你总有一天会后悔这个决定的