Spring Boot 获取正在Pivotal Cloud Foundry上运行的应用程序的示例ID

falq053o  于 2022-11-23  发布在  Spring
关注(0)|答案(2)|浏览(135)

我们在Pivotal Cloud Foundry上部署了一个springboot应用程序(文件阅读/写入)。当前,只有一个示例正在运行,但现在我们被迫将示例计数增加到2(由于公司政策/标准等原因)。如果我们将示例计数增加到2,我们的应用程序将无法按预期100%工作,它可能会单独处理同一文件,这可能会导致问题。
所以我的问题是
1.是否有任何方法可以为每个示例单独设置cron调度程序?或者
1.在spring Boot 应用程序内部,是否有任何方法可以传递示例编号或id或任何标识,比如说这是示例1或2?这样我就可以限制某个示例的执行。

atmip9wb

atmip9wb1#

我经常看到的一种可能性是查看CF_INSTANCE_INDEX,它是一个从零开始的索引,指示哪个示例正在运行。
我看到的典型做法是,应用查看索引是否为零,然后启用某些功能。如果索引大于零,则关闭相同的功能。这样,该功能就像调度程序一样,只在第一个示例上运行。
你必须记住,这样做,你的调度程序只在一个示例上运行,如果那个示例发生故障,调度程序可能会错过它应该触发的事件。这可能是也可能不是问题,这取决于你的应用程序要求和你使用的调度程序在崩溃后启动时的行为(也许它会赶上?)。
另一种可能性是寻找一种更分布式的调度器,一种可以科普多个工作者的调度器。虽然不是认可,但Jobrunr是Java领域的一个例子。我相信Java和其他语言中都存在其他的调度器。这些工具的特点是它们可以跨多个进程/容器/虚拟机协调工作,这样你就不会有多次运行的作业。

9jyewag0

9jyewag02#

@Value("${CF_INSTANCE_INDEX}")                                                                                                  
 private int intanceIndex;

只需添加上面的行,我们就可以获得应用程序中从0开始的示例的索引。
谢谢@丹尼尔Mikusa

相关问题