计划作业@Scheduled与crontab的首选方式

时间:2019-03-19 07:02:18

标签: cron spring-scheduled

例如,我必须每分钟定期运行一个实用程序。 因此,我有两个选项@Scheduled spring boot vs Linux box的crontab,我们将使用它们来部署工件。 所以,我的问题是应该使用哪种方式? 每个解决方案的优缺点是什么,如果您可以建议的话,可以选择其他解决方案。

1 个答案:

答案 0 :(得分:0)

仅用于比较这两者,我没有太多要点,只是基于我现在所面临的这种情况。我刚刚建立了一个新的端点,并且正在针对生产环境进行性能测试和压力测试。我尚未决定cron的排程时间,可能需要在更多观察时间上稍作调整。通过@Scheduled进行设置需要我每次进行更改时都部署/重新启动应用程序。

重新启动应用程序通常比crontab编辑花费更多时间。

除此之外,还需要考虑可用性和可伸缩性方面的几点-

  • 如果服务器发生故障,仅通过crontab在单个服务器上进行设置将意味着单点故障。
  • 通过@Scheduled进行设置也可能是相同的。
  • 如果您有服务器的多个实例,这可能意味着端点被触发两次,并且您可能不想拥有相同的实例。最坏的情况是,如果扩展是在很长时间之后发生的,并且您将@Scheduled端点写得很早,而该端点仅部署在单个服务器上,则您忘记了。扩大规模后,该过程将开始遭受两次打击。

因此,就可用性和可伸缩性而言,这些似乎都不是最好的。 在这种情况下,理想情况下需要一个分布式cron管理系统(我听说过Rundeck),该系统可以管理在可用服务器中调用哪个以达到所需的端点,并在需要时调用下一个服务器。第一个失败了。 如有任何调查需要。可以检查rundeck的日志以找到实际被调用的服务器。