有没有谁碰到过这样的情况,spring的job跑着跑着,不按时去启动了,用的是TimerTask;我现在怀疑是不是程序抛出异常了就会导致这种情况,请大虾们指点!

解决方案 »

  1.   

     在TimerTask执行第二次的时候抛出异常,timer可能就停止掉了,但这种行为是不确定的,在有些平台上某些jvm实现可能依然能够运行良好,但在另外一些环境下就出问题了,在开发时可能没测试出问题,部署到生产环境可能就有问题了。在这种情况下,若后续再用timer来schedule任务,会抛出java.lang.IllegalStateException: Timer already cancelled的异常。        如果正在使用jdk1.5及以后版本,强烈建议换成ScheduledThreadPoolExecutor(可通过Executors.newScheduledThreadPool获得),这种方式就不会有Timer的种种问题(如绝对时间问题,任务执行丢失问题等)。如果没办法使用ScheduledThreadPoolExecutor,那么一定要记得catch住Timer#run抛出的Runtime异常
    参考网站:    http://www.ticmy.com/?p=82    警惕TimerTask#run可能抛出的异常
      

  2.   

    多些楼上的详细讲解,我是在做网站WWW.yishish.com中碰到这个问题的,为了改动较小,我还是先catch住所有的异常才放上去试试,会不会再停。