Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer EJB计时器在计划时间之前关闭_Timer - Fatal编程技术网

Timer EJB计时器在计划时间之前关闭

Timer EJB计时器在计划时间之前关闭,timer,Timer,我正在使用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 forma

我正在使用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过期一次

我检查了文档,但没有发现任何与我的问题相关的东西-
,long,java.io.Serializable)

我想startDateTime>now+1分钟,对吗?你在用什么应用服务器?我在用JBoss4.2.3,EJB3.0。是的,startDateTime在未来大约是5分钟。当然,这也是显而易见的,但我必须检查,startDateTime现在是+5分钟,你不是假设createTimer(startDateTime,300000,null)意味着startDateTime+5分钟,而是一个从startDateTime开始,然后每5分钟重复一次的计时器,对吗?我希望计时器在startDateTime(现在是+5分钟)关闭,然后每隔5分钟(300000毫秒)就会关闭一次。太好了。现在,你能把你的代码贴在声明startDateTime的地方吗?