千万 使用Timer
在Java EE的环境!如果任务抛出运行时异常,则整个Timer
事件将被杀死,并且将不再运行。基本上,您需要重新启动整个服务器才能使其再次运行。而且,它对系统时钟的变化很敏感。
使用ScheduledExecutorService
代替。它对任务中引发的异常或系统时钟的更改不敏感。您可以通过其shutdownNow()
方法关闭它。
这是整个servletcontextlistener
实现的示例(请注意:web.xml
由于有了新的@WebListener
注释,因此无需注册):
@WebListener
public class BackgroundJobManager implements servletcontextlistener {
private scheduledexecutorservice scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new YourParsingJob(), 0, 5, TimeUnit.HOUR);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}