无状态 EJB 计时器活动计时器计数太高

Stateless EJB timer active timer count too high

我有一个无状态 EJB 版本 3.0 运行ning,它应该每 30 秒触发一次。我的问题是,在我 运行ning 之后,无论我做什么,它总是 运行 有 4 个活动计时器(在我的 WebLogic 控制台中验证)大约每 2 秒左右关闭一次。

遗憾的是,我不能非常具体地使用我的代码,但这是我所拥有的:

如有任何建议,我们将不胜感激。我想我对发生的事情没有完全的了解,但我找不到任何对此有帮助的东西。

在 EJB 3.0 中,所有计时器都是持久的。换句话说,它们在服务器重启后仍然存在。

如果您创建间隔计时器,它将 运行 直到您取消它。停止服务器不会取消它。已知许多实现会在服务器重新启动时尝试再次赶上。

您现有的代码会在您重新启动时创建另一个计时器。

考虑将以下内容添加到为计时器提供服务的 EJB 中的 @PostConstruct 方法:

 @Resource
 private TimerService timerService;

 @PostConstruct
 void startup() {
     ...
     for (Timer timer: timerService.getTimers()) {
         timer.cancel();
     }
     ...
 }

这应该会为您清理干净。