【发布时间】:2019-01-15 08:57:21
【问题描述】:
我有一个使用fixedDelay 或cron 配置的spring 调度程序任务,并且该应用程序的多个实例在多个JVM 上运行。
默认行为是所有实例都在执行调度任务。
有没有一种方法可以控制这种行为,以便只有一个实例执行调度程序任务而其他实例不执行。
如果您知道任何方法,请告诉我。
谢谢
【问题讨论】:
-
使用 Quartz 之类的东西来调度你的任务,而不是 Spring 中的简单调度器。 Quartz 允许您只制作单个实例的作业,并且当使用数据库存储触发器和执行逻辑时,这也适用于多个实例。只有一个会运行任务。另一种解决方案是仅在一个实例上启用任务异常并在其他实例上禁用调度。您可以有条件地对属性进行此操作。缺点是您可能会忘记为 1 个或多个实例禁用/启用此功能。
标签: spring spring-boot scheduled-tasks spring-batch