多个实例上的春季任务和计划任务 [英] Spring and scheduled tasks on multiple instances

查看:0
本文介绍了多个实例上的春季任务和计划任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个Spring Boot应用程序,并且有计划的任务。

我们希望在多台服务器上部署我们的应用程序,应用程序的多个实例也是如此。

如何将Spring配置为仅在指定服务器上运行计划任务?

推荐答案

这是一个非常广泛的主题。要实现这一点,有很多选择。

  1. 您可以将应用程序配置为具有多个配置文件。例如,使用另一个配置文件‘cron’。并仅在具有此配置文件的一台服务器上启动应用程序。例如,在生产环境中,您有三台服务器(S1、S2、S3),然后您可以在S1上运行配置文件prod和cron(-Dspring.profiles.active=prod,cron)。而在S2和S3上,仅使用Prod配置文件(-Dspring.profiles.active=prod)。

    在代码中,您可以对调度程序类使用@Profile("cron")。这样,它将仅在cron配置文件处于活动状态时执行

  2. 使用分布式锁。如果您的环境中有ZooKeeper,则可以使用它来实现分布式锁定系统。

  3. 您可以使用某个数据库(MySQL)并创建一个示例代码来锁定其中一个表并添加一个条目。无论哪个实例获得锁,都将在该数据库中创建一个条目并执行cron作业。你需要 检查您的代码,如果getLock()成功,则继续执行。MySQL有像LOCK TABLES这样的实用程序,您可以使用它们来避免并发读/写。

我个人认为,选项2是最好的。

这篇关于多个实例上的春季任务和计划任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆