我希望每隔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次 任何帮助表示赞赏
答案 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)
。