我们有一个 Spring Boot 应用程序,并且有计划的任务。
我们希望将我们的应用程序部署在多个服务器上,因此将部署多个应用程序实例。
如何将 Spring 配置为仅在指定服务器上运行计划任务?
原文由 Combo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们有一个 Spring Boot 应用程序,并且有计划的任务。
我们希望将我们的应用程序部署在多个服务器上,因此将部署多个应用程序实例。
如何将 Spring 配置为仅在指定服务器上运行计划任务?
原文由 Combo 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.7k 阅读✓ 已解决
4 回答2.3k 阅读
2 回答1.4k 阅读
2 回答1.8k 阅读
1 回答854 阅读✓ 已解决
1 回答1.3k 阅读
这是一个非常广泛的话题。有很多选择可以实现这一目标。
-Dspring.profiles.active=prod,cron
)在 S1 上运行。在 S2 和 S3 上,只需使用产品配置文件(-Dspring.profiles.active=prod
)。在代码中,您可以在调度程序类上使用
@Profile("cron")
。这样它只会在 cron 配置文件处于活动状态时执行使用分布式锁。如果你的环境中有 Zookeeper,你可以使用它来实现分布式锁定系统。
您可以使用一些数据库(mysql)并创建一个示例代码来锁定其中一个表并添加一个条目。无论哪个实例获得锁,都会在这个数据库中创建一个条目并执行 cron 作业。您需要检查您的代码,如果
getLock()
成功,则继续执行。 Mysql 具有LOCK TABLES
类的实用程序,您可以使用它来避免并发读/写。我个人会说,选项2是最好的。