您可以用来
ServletContextListener在webapp启动时执行一些初始化。运行定期任务的标准Java
API方法是
Timer和的组合
TimerTask。这是一个启动示例:
public void contextInitialized(ServletContextEvent event) { Timer timer = new Timer(true); timer.scheduleAtFixedRate(new CleanDBTask(), 0, oneHourInMillis); timer.scheduleAtFixedRate(new StatisticsTask(), 0, oneQuartInMillis);}这两个任务看起来像这样:
public class CleanDBTask extends TimerTask { public void run() { // Implement. }}Timer但是,在Java
EE中不建议使用。如果任务抛出异常,则整个
Timer线程将被杀死,您基本上需要重新启动整个服务器才能使其再次运行。该
Timer也是在系统时钟的变化很敏感。
较新的和更强大的
java.util.concurrent方式将是一个组合
ScheduledExecutorService,只是一个
Runnable。这是一个启动示例:
private ScheduledExecutorService scheduler;public void contextInitialized(ServletContextEvent event) { scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new CleanDBTask(), 0, 1, TimeUnit.HOURS); scheduler.scheduleAtFixedRate(new StatisticsTask(), 0, 15, TimeUnit.MINUTES);}public void contextDestroyed(ServletContextEvent event) { scheduler.shutdownNow();}


