是否可以在Java中的固定间隔后运行ejb计时器?

时间:2013-12-31 20:45:45

标签: java timer ejb-3.1

我希望每隔2小时运行一次ejb计时器,介于9-18和顺便说一下星期五,星期五顺便说一下9-14和9-13号

如果周五计时器可能在1小时之后运行

如何使用ejb timer

执行此操作
@Singleton
@Startup
public class TimedBean{
    @Resource
    private TimerService service;

    @PostConstruct
    public void init(){
        ScheduleExpression exp=new ScheduleExpression();
        exp.hour("*")
            .minute("*")
            .second("*/30");
        service.createCalendarTimer(exp);
    }

    @Timeout
    public void timeOut(){
        System.out.println(new Date());
        System.out.println("time out");
    }

}

另请注意,根据我的说法,此代码将在每30秒后运行一次,但问题是每30秒后调用2-3次 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以创建计时器来完成所有这些事情:

ScheduleExpression exp;

exp = new ScheduleExpression().minute(0).second(0);
exp.dayOfWeek("mon-sat").hour("9,11,13,15,17");
service.createCalendarTime(exp);

exp = new ScheduleExpression().minute(0).second(0);
exp.dayOfWeek("fri").hour("9-14");
service.createCalendarTime(exp);

exp = new ScheduleExpression().minute(0).second(0);
exp.dayOfWeek("sat").hour("9,11,13");
service.createCalendarTime(exp);

上述计时器中存在一些冲突,但这似乎是您所要求的。你可能希望通过给每个小时不同的时间来错开它们;例如,您可能希望第二个使用minute(20),第三个使用minute(40)

参考:ScheduleExpression documentation