我使用javax.ejb.TimerService创建一个计时器,以便在特定日期和时间开始,然后定期过期。
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
Date startDateTime = null;
DateTimeFormatter formatter = DateTimeFormat.forPattern("hh:mm a");
DateTime time = formatter.parseDateTime(ConfigProperties.getProperty("timer.starttime"));
DateTime dateTime = new DateTime().withTime(time.getHourOfDay(), time.getMinuteOfHour(), 0, 0);
startDateTime = dateTime.toDate();
long timerIntervalMs = Long.valueOf(ConfigProperties.getProperty("timer.interval.mins")) * 60 * 1000;
timerService.createTimer(startDateTime, timerIntervalMs, null);
我的服务器启动时会执行上述初始化代码。但是,计时器在服务器仍在启动时到期( startDateTime之前)。为什么会这样?我在我的本地机器上尝试这个,并根据我的本地系统时钟将startDateTime初始化为未来的时间。
在第一次不正确的到期之后,它完全正常 - 在startDateTime过期,之后每timerIntervalMs
ms过期。
我检查了文档,但没有找到与我的问题有关的任何内容 - http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html#createTimer(java.util.Date,long,java.io.Serializable)