定时任务quarter 捕获异常抛出异常的坑

本文探讨了在使用Quartz框架进行定时任务开发时遇到的异常处理问题,特别是在捕获异常后任务未能正确结束的情况,并提供了两种解决方案:立即重新执行任务或立即停止所有相关触发器。

在写定时任务的时候, 捕获了 方法的 异常,然后抛出去

} catch (Exception e) {
			logger.error("定时任务>>更新直接上级出问题>>>执行任务出错了..."+e); 
			JobExecutionException jobe = new JobExecutionException(e); 
			jobe.setRefireImmediately(true); 
			throw jobe;
		}

看起来没有问题,测试的时候,发现 当出现了一个 小小的SQL异常的时候,比如 多一个 引号 '
结果发现它是捕获了,但是不知道抛去哪里了, 定时任务不没有结束,反而 重新 继续 执行了,一直循环 执行下去, 被吓到了。 目前还不知道是什么原因。如果是 空指针异常啊,什么的 又没有出现这样的异常,方法就直接结束了,很奇怪。估计是和 框架 架构有关吧,总之为了防止坑,还是 结束方法执行吧,简单暴力。 为了反正出现死异常循环,因此 捕获异常的时候, 就结束方法执行。

} catch (Exception e) {
			logger.error("定时任务>>更新直接上级出问题>>>执行任务出错了..."+e); 
			return;
		}

百度了一些 找到原因的 了

问题1 如果你的任务执行发生错误了怎么办呀! 
Quartz提供了二种解决方法 
1 立即重新执行任务 
2 立即停止所有相关这个任务的触发器 
问题2 怎么去执行呢 
Quartz的解决方式是 
在你的程序出错时,用Quartz提供的JobExecutionException类相关方法很好的解决 
1  立即重新执行任务 
Java代码  收藏代码
try {  
           int zero = 0;  
           @SuppressWarnings("unused")  
           int calculation = 4815 / zero;  
       } catch (Exception e) {  
           _log.error("执行任务出错了...");  
           JobExecutionException e2 =   
               new JobExecutionException(e);  
           // this job will refire immediately  
           e2.setRefireImmediately(true);  
           throw e2;  
       }  

2 立即停止所有相关这个任务的触发器

try {  
            int zero = 0;  
            @SuppressWarnings("unused")  
            int calculation = 4815 / zero;  
        } catch (Exception e) {  
            _log.info("--- Error in job!");  
            JobExecutionException e2 =   
                new JobExecutionException(e);  
            // Quartz will automatically unschedule  
            // all triggers associated with this job  
            // so that it does not run again  
            e2.setUnscheduleAllTriggers(true);  
            throw e2;  
        }  

转载于:https://my.oschina.net/u/2419285/blog/842342

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值