具有结束日期的EJB TimerService间隔计时器

时间:2013-12-19 13:00:32

标签: java-ee timer ejb

我想创建一个以特定间隔运行的EJB Timer,但它也应该在某个时刻停止触发。 EJB的TimerService似乎只提供了两种可能性:

  • 您可以创建具有特定间隔的无限循环计时器。
  • 您可以创建一个日历计时器,它具有开始和结束日期,还允许事件每N秒/分钟/小时重复一次。问题在于,这种重复并没有“滚动”,正如文件明确指出的那样。因此,如果我创建一个计时器,每隔5个小时安排一次,那么每隔5个小时就会,这不是我想要的。

我需要的精确度是几小时,所以任何允许每小时重复一次“滚动”天的解决方案都可以。

谢谢。

3 个答案:

答案 0 :(得分:0)

您可以使用ScheduleExpression执行此操作:

ScheduleExpression schedule = new ScheduleExpression();
schedule.start(startDate);
schedule.hour("*/2");
schedule.end(endDate);
Timer timer = timerService.createCalendarTimer(schedule);

上述代码每隔2小时触发一次Timer。

答案 1 :(得分:0)

此方法 getTimers()为您提供Bean TimerService当前处于活动状态的计时器列表。对于列表中的每个计时器,执行 getInfo()以获取计时器的信息。如果这是 null ,那么它是您已启动的调度程序。然后执行取消(),它将停止您的计划程序。

List<Timer> timerList = timerService.getTimers();
for(Timer t : timerList){
    if(t.getInfo() ==  null){
        t.cancel();
    }
}

因此决定从哪里使用它。

答案 2 :(得分:0)

您可以创建两个或更多具有相同功能的计时器。或者创建单个时间计时器,在执行期间计算下一个执行日期/时间并创建下一个单个时间计时器