集群中ServletContextListener的单个实例

时间:2020-07-02 13:13:36

标签: java performance servlets singleton

是否可以在集群应用程序服务器中的多个节点之间仅创建一个ServletContextListener实例?要求在应用程序启动时启动逻辑,并每5分钟重复一次,直到应用程序被破坏为止,但是即使在集群环境中,也只能由一个线程完成。尝试编写单例类,ServletContextListener,@Singleton批注,但是在集群环境中,通过启动等于节点数的实例数,一切都会失败。

解决这个问题的任何想法都将真正帮助我前进。不允许使用Spring或任何其他框架,必须使用纯Java API。

1 个答案:

答案 0 :(得分:1)

您必须使用分布式锁或领导者选举机制才能在集群中强制执行一次执行。

如果不使用外部库或第三方应用程序(用于领导者选举或锁定管理),这不是一件容易的事

如果您使用的是数据库,则可以使用它来实现互斥并检查任务是否已执行:使用自定义表并进行乐观或悲观锁定(选择更新