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

计划作业的首选方式@Scheduled vs crontab,cron,spring-scheduled,Cron,Spring Scheduled,我必须定期运行一个实用程序,例如,每分钟运行一次。 因此,我有两个选项@Scheduled spring boot vs crontab of linuxbox,用于部署工件。 所以,我的问题是我应该用哪种方式? 每个解决方案的优缺点是什么,如果你能建议的话,还有其他的解决方案。只是为了比较这两种方案,我没有太多的观点,只是基于我现在面临的这种情况。我刚刚建立了一个新的端点,正在生产中对其进行性能测试和压力测试。我还没有决定cron的时间表时间,这些时间可能需要在更多的观察时间内稍微调整一下。通

我必须定期运行一个实用程序,例如,每分钟运行一次。 因此,我有两个选项@Scheduled spring boot vs crontab of linuxbox,用于部署工件。 所以,我的问题是我应该用哪种方式?
每个解决方案的优缺点是什么,如果你能建议的话,还有其他的解决方案。

只是为了比较这两种方案,我没有太多的观点,只是基于我现在面临的这种情况。我刚刚建立了一个新的端点,正在生产中对其进行性能测试和压力测试。我还没有决定cron的时间表时间,这些时间可能需要在更多的观察时间内稍微调整一下。通过@Scheduled设置需要我在每次更改时部署/重新启动应用程序

应用程序重启通常比crontab edit花费更多的时间

除此之外,考虑到可用性和可扩展性方面的几点:

  • 如果服务器停机,则仅在单个服务器上通过crontab进行设置将意味着单点故障
  • 通过@Scheduled进行设置也可能意味着相同
  • 如果您有多个服务器实例,这可能意味着端点会被触发两次,您可能不希望有相同的实例。最糟糕的情况是,如果扩展发生在很长一段时间之后,您将@Scheduled endpoint写了很久,而它只部署在一台服务器上,然后您就忘记了。一旦扩展发生,进程将开始受到两次攻击
因此,就可用性和可伸缩性而言,这些都不是最好的。 在这种情况下,理想情况下需要一个分布式cron管理系统(我听说过Rundeck),该系统管理在可用服务器中调用哪些服务器以达到所需的端点,如果需要,在第一个服务器关闭时调用下一个服务器。 如果需要调查。可以检查rundeck的日志以找到实际调用的服务器