我们的团队目前正在开发一个Java应用程序,该应用程序将具有许多不断运行的处理线程(执行诸如从队列轮询)。
与此应用程序相关的是,必须在某些预定时间段(每天一次,每六个小时等)运行一系列任务。我们团队的一些成员认为最好通过cron将这些任务作为独立进程执行,而其他人则认为将它们包含在通过Java的ScheduledExecutorService安排的当前应用程序中会更好。有关何时使用cron与内部ScheduledExecutorService的最佳做法,还是仅仅是偏好问题?
答案 0 :(得分:2)
使用ScheduledExecutorService
的好处是你正在使用100%的java,因此如果你想升级你的服务器/更改你的机器由于某种原因,那么你不需要重新配置cron作业。此外,ScheduleExceutorService还允许您使用Callable
,因此您可以返回一些结果并在java中处理它们。
答案 1 :(得分:1)
使用cron的优点是,您的操作团队可能熟悉它,并且您可以轻松地重新安排或暂停操作,而无需更改和重新部署应用程序。 (调度批处理操作主要是操作团队的任务)
缺点是您需要在应用程序中使用cron作业可以调用的接口(如REST服务),或者cron启动第二个VM,在执行作业期间与应用程序并行运行。
我们目前正在从基于Quartz的内部调度转向cron / REST方法。
答案 2 :(得分:0)
我会在单一责任原则方面投票:如果周期性任务可以作为独立的进程运行,独立于主应用程序,那么它们应该作为单独的进程运行。如果你把它全部扔进一个大麻袋,我的钱说你有一天会后悔那个决定。