我需要创建一个间隔定时器,每周自动运行一次。我不想基于用户输入启动它,但我希望在应用部署到服务器时就创建它。我看到的每个示例都有另一个类启动定时器。 我不想使用消息驱动的bean来创建定时器,因为审计只需查询给定时间段的数据库而不是基于发送消息的操作。
我包含了一个定时器的示例。 在下面的示例中,定时器应该每10分钟触发一次。 作为测试,我希望定时器每10分钟触发一次,以便测试定时器。
@Stateless
public class TimerTest implements
TimerTestLocal, TimerTestRemote{
@Resource
private TimerService timerService;
private Logger log = Logger.getLogger(TimerTest.class);
private long interval = 1000 * 60 * 10;
private static String TIMER_NAME = "AuditTimer";
public void scheduleTimer() throws NamingException {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
//cal.set(Calendar.HOUR_OF_DAY, 23);//run at 11pm
//cal.set(Calendar.MINUTE, 00);
//cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm");
log.debug("schedule for: " + sdf.format(cal.getTime()));
timerService.createTimer(cal.getTime(), interval, TIMER_NAME);
}
public void cancelTimer() {
for(Object obj : timerService.getTimers())
{
Timer timer = (Timer)obj;
if(timer.getInfo().equals(TIMER_NAME))
timer.cancel();
}
}
@Timeout
public void timerEvent(Timer timer) {
log.debug("timer fired");
}
}
那么有没有办法在部署应用程序时启动计时器? 我认为将计时器的创建放在@PostConstruct方法中并不是一个好主意,因为服务器上会有类加载器。