仅在一个WebLogic群集节点上运行@Scheduled任务?

Axe*_*auf 13 spring weblogic cluster-computing scheduled-tasks

我们在集群WebLogic 10.3.4环境中运行Spring 3.0.x Web应用程序(.war)和夜间@Scheduled作业.但是,当应用程序部署到每个节点时(使用AdminServer Web控制台中的部署向导),每晚在每个节点上启动作业,从而同时运行多次.

我们怎样才能防止这种情况发生?

我知道像Quartz这样的库允许通过数据库锁表来协调集群环境中的作业,或者我甚至可以自己实现类似的东西.但是,由于这似乎是一个相当普遍的情况,我想知道Spring是否还没有选择如何轻松绕过这个问题,而无需在我的项目中添加新库或进行手动解决方法.

如果有任何未解决的问题,请告诉我.我还在Spring社区论坛上提出了这个问题.非常感谢你的帮助.

jal*_*gar 5

我们只有一个任务发送每日摘要电子邮件.为了避免额外的依赖关系,我们只需检查每个节点的主机名是否与已配置的系统属性相对应.

private boolean isTriggerNode() {
   String triggerHostmame = System.getProperty("trigger.hostname");;
   String hostName = InetAddress.getLocalHost().getHostName();
   return hostName.equals(triggerHostmame);
}

public void execute() {
   if (isTriggerNode()) {
      //send email
   }
}
Run Code Online (Sandbox Code Playgroud)


Axe*_*auf 4

我们正在使用应用程序数据库内的共享锁表来实现我们自己的同步逻辑。这允许所有集群节点在实际启动作业之前检查作业是否已经在运行。