Quartz超时重试机制

      高可用作为考究系统的一项重要指标,如何做到系统的高可用,谈及一个系统,这个话题就难以越过。Quartz作为目前调度框架的一个流行组件,如何保证Quartz的高可用,任务调度失败后,如何进行重试,这个也是一个值得关注的问题。

      网上看过许多涉及定时调度的开源项目,但发现其都存在一个问题,并未对任务调度的失败做处理,仅仅只是简单的日志记录,以及手工重采。但是现实情况中,往往可能因为间歇性原因导致调度的失败,可能重新调度一下就可以成功,那么这时失败重试就尤为重要。

      找过网上关于Quartz失败后如何实现重试。倒是找到过集中方式。

  1. 引入第三方jar包,spring-retry。可以通过注解的方式或者集成对应的类,重写对应的方法。个人观点。又引入第三方jar,感觉不太理性。同时感觉过于复杂,有的业务需求不太好控制。
  2. 在Quartz里面抛异常时,自己用线程类睡多长时间后,进行再次调用。这种存在很大缺点。线程一直阻塞,不太优雅。当然可以用线程池的方式来进行实现,这种我没尝试过。
  3. Quartz抛异常时,获取失败的job,设置启动时间,策略执行一次,这种方式,个人觉得最好,够优雅

下面简单介绍一下这种方式,直接贴源码:

public abstract class AbstractQuartzJob implements Job
{
    private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);

    @Override
    public void execute(JobExecutionContext context) {
        ParamMap<String, Object> sysJob = (ParamMap<String, Object>) context.getMergedJobDataMap().get(Sch
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值