我有一個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