我的设置: NetBeans 8.0.2 在Glassfish 4.2上运行EJB3.2的JEE7
嗨,我开始了一个计时器服务
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void chronJobSySODate() {
System.out.println("Timer event: " + new Date());
}
我使用@PostConstruct Annotation
在另一个Bean中调用了此方法@PostConstruct
public void startChronJob(){
chronJobBean.chronJobSySODate();
}
尽管如此,由于persistent = false
因为{@ 1}}计时器在杀死Glassfish后会消失,所以即使在同一Glassfish服务器上运行的其他NetBeans项目中,它仍然存在。
我已经查看了这个StackOverflow线程Is there a way to stop/re-start ejb 3.1 automatic timer during runtime?
所以我试过
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变量,没有定时器(但定时器直到运行。
答案 0 :(得分:0)
我不知道这是否能解决您的问题,但由于我尚未被允许发表评论(< 50 rep),我将此作为答案发布:
你应该在PostConstruct中省略对timer-method的调用。 使用 @Schedule 注释的方法由容器执行,无需进一步注册。 既然你没有发布你的"来电者" -class的其他部分,我必须猜测: 如果它是标记为 @Startup 的EJB,否则即使没有活动计时器也会调用您的计时器方法。