多个实例上的春季任务和计划任务 [英] Spring and scheduled tasks on multiple instances
本文介绍了多个实例上的春季任务和计划任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们有一个Spring Boot应用程序,并且有计划的任务。
我们希望在多台服务器上部署我们的应用程序,应用程序的多个实例也是如此。
如何将Spring配置为仅在指定服务器上运行计划任务?
推荐答案
这是一个非常广泛的主题。要实现这一点,有很多选择。
您可以将应用程序配置为具有多个配置文件。例如,使用另一个配置文件‘cron’。并仅在具有此配置文件的一台服务器上启动应用程序。例如,在生产环境中,您有三台服务器(S1、S2、S3),然后您可以在S1上运行配置文件prod和cron(
-Dspring.profiles.active=prod,cron
)。而在S2和S3上,仅使用Prod配置文件(-Dspring.profiles.active=prod
)。在代码中,您可以对调度程序类使用
@Profile("cron")
。这样,它将仅在cron配置文件处于活动状态时执行使用分布式锁。如果您的环境中有ZooKeeper,则可以使用它来实现分布式锁定系统。
您可以使用某个数据库(MySQL)并创建一个示例代码来锁定其中一个表并添加一个条目。无论哪个实例获得锁,都将在该数据库中创建一个条目并执行cron作业。你需要 检查您的代码,如果
getLock()
成功,则继续执行。MySQL有像LOCK TABLES
这样的实用程序,您可以使用它们来避免并发读/写。
我个人认为,选项2是最好的。
这篇关于多个实例上的春季任务和计划任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文