我在Pivotal Cloud Foundry(PCF)中有一个春季@Scheduled作业,该作业可以在多个实例中运行,但是我想限制它只能在PCF云环境中的一个实例中运行。
PCF是否为此提供任何现成的解决方案,还是我们需要对代码进行更改?
任何建议对我实施都有帮助。
进行此工作的一种方法是查看INSTANCE_INDEX
或CF_INSTANCE_INDEX
(它们是相同的)环境变量。这将具有您的应用程序实例的实例号。它是从零开始的,因此它等于您拥有的应用程序实例数减去一个1(例如:5个AI == 0-4)。
有多种方法可以在您的应用程序中实现此功能,但高级的想法是,您选择一个索引号并对其进行设置,以便仅在该索引号上运行调度。通常选择零,因为总是有第零个实例,但是您可以在任何索引上运行它。
关于实现此目标的方法:
@Conditional
并创建用于检查env变量索引的自定义org.springframework.context.annotation.Condition
。我确定还有其他选择。这些只是我头顶上的那些。
希望有帮助!