我有一个ScheduledExecutorService
,我每15分钟执行一次任务(在Tomcat的Web应用程序中)。
在ServletContextListener
在contextDestroyed
我做:关闭程序在执行程序中如何工作?
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
scheduler.shutdown();
}
});
启动调度程序,如:
final Runnable r = new Runnable(){
@Override
public void run() {
System.out.println("My task");
//Do some task
}
};
updater.scheduleWithFixedDelay(r, 30, 15, TimeUnit.MINUTES);
问题:在shutdown
不执行任何余下的任务。
有一个任务正在运行,但我没有看到任何日志,所以它似乎没有执行。为什么?
UPDATE:
如果我启动tomcat再经过2分钟,我关机则是不被视为计划和必须运行的任务?我的意思是,如果提交任务不被视为等待?或者它必须实际运行?
我Tomcat.The关机时运行的是里面的ServletContextListener。我停止使用'shutdown' – Jim 2012-03-28 13:20:26
通常,您需要实现自己的逻辑,以1)处理队列中的所有(或超时)未处理的消息或2)保存消息并在应用程序重新启动时处理它们(通常通过持久队列的JMQ完成) – AngerClown 2012-03-28 13:21:00
我还是不太理解你的问题@Jim。你可以编辑问题,并更精确?你提供关机代码,但也许你的问题是你的后台任务根本没有运行? – Gray 2012-03-28 13:23:35