Java 集群中ServletContextListener的单个实例

Java 集群中ServletContextListener的单个实例,java,performance,servlets,singleton,Java,Performance,Servlets,Singleton,是否可以在集群应用服务器中的多个节点上只生成一个ServletContextListener实例?需要在应用程序启动时启动一个逻辑,并每5分钟重复一次,直到应用程序被销毁,但即使在集群环境中,也只能由一个线程完成。尝试编写singleton类、ServletContextListener、@singleton注释,但在群集环境中,由于启动的实例数等于节点数,所以一切都失败了 任何解决这一问题的想法都将真正帮助我继续前进。Spring或任何其他框架都是不允许的,必须是纯java API。您必须使用

是否可以在集群应用服务器中的多个节点上只生成一个ServletContextListener实例?需要在应用程序启动时启动一个逻辑,并每5分钟重复一次,直到应用程序被销毁,但即使在集群环境中,也只能由一个线程完成。尝试编写singleton类、ServletContextListener、@singleton注释,但在群集环境中,由于启动的实例数等于节点数,所以一切都失败了


任何解决这一问题的想法都将真正帮助我继续前进。Spring或任何其他框架都是不允许的,必须是纯java API。

您必须使用分布式锁或领导者选举机制,以便在集群中强制执行单个执行

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


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

谢谢,我只想到使用数据库表方法,但我想验证一下是否有比这更好的方法可用。我遇到了weblogic.cluster.singleton.SingletonService(因为我正在使用weblogic),但发现很难让它工作。创建了一个jar,它有实现这个接口的简单类和activate()和deactivate()方法中的一些逻辑,并修改了META-INF/application.xml将这个jar注册为java模块,还修改了META-INF/weblogic-application.xml将我的类注册为singleton类。但是,当我尝试部署时,得到“MyClass已经注册为singleton”,有人知道我缺少的任何其他配置吗?