【发布时间】:2013-09-01 23:55:29
【问题描述】:
我正在使用 EJB 3.1。 在下面的代码中,我试图创建一个每年重复的计时器:
ScheduleExpression scheduleExpression = new ScheduleExpression();
Date now = new Date();
scheduleExpression.start(now);
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
scheduleExpression.minute(calendar.get(Calendar.MINUTE));
scheduleExpression.hour(calendar.get(Calendar.HOUR_OF_DAY));
scheduleExpression.dayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
scheduleExpression.month(calendar.get(Calendar.MONTH));
但它不起作用,实际上行为是非常随机的(在某些重复中有效,而在另一些中则无效)。
奇怪的是我也有每月重复一次(见下面的代码)而且它正在工作。
ScheduleExpression scheduleExpression = new ScheduleExpression();
Date now = new Date();
scheduleExpression.start(now);
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
scheduleExpression.minute(calendar.get(Calendar.MINUTE));
scheduleExpression.hour(calendar.get(Calendar.HOUR_OF_DAY));
scheduleExpression.dayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
有什么想法吗?
【问题讨论】:
-
你如何测试这个:等待一年?我永远不会这样做(这么长的时间),因为您必须非常小心,在部署、AS 升级、硬件升级之后存储/恢复计划。
-
@Beryllium:改变墙上时间是一种方法。
-
@Beryllium:为了测试这个,让应用程序在虚拟机中运行,只需更改我可以测试它的日期。
标签: java jakarta-ee timer ejb scheduled-tasks