取消计时器服务从@Schedule开始



我的设置:NetBeans 8.0.2JEE7 与 EJB3.2 运行在 Glassfish 4.2 上

嗨,我开始了一个定时服务

@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void chronJobSySODate() {
    System.out.println("Timer event: " + new Date());
}

我在另一个带有@PostConstruct注释的 Bean 中调用了此方法

@PostConstruct
public void startChronJob(){
    chronJobBean.chronJobSySODate();
}

现在,尽管由于persistent = false计时器在杀死Glassfish后会消失,但它仍然存在,即使在运行在同一Glassfish服务器上的其他NetBeans项目中也是如此。

我已经看过这个堆栈溢出线程有没有办法在运行时停止/重新启动 ejb 3.1 自动计时器?

所以我尝试了

import javax.annotation.Resource;
import javax.ejb.TimerService;
    @Resource
    TimerService timerService;
    public void cancelAllTimers() {
        System.out.println("cancelAllTimers");
        for (Timer timer : timerService.getTimers()) {
            System.out.println("Canceling Timer: info: " + timer.getInfo());
            timer.cancel();
        }
    }

但是关于 timerService 变量,没有计时器(但计时器直到运行。

我不知道

这是否解决了您的问题,但由于我尚未被允许发表评论(<50 次),我将其作为答案发布:

你应该省略在PostConstruct中对计时器方法的调用。用@Schedule注释的方法由容器执行,无需任何进一步注册。由于您没有发布"呼叫者"类的其余部分,因此我不得不猜测:如果它是标记为@Startup或使用的 EJB,则即使没有活动的计时器,也会调用计时器方法。

最新更新