java quartz 失败重试_java – Quartz在失败时重试

本文介绍了在Quartz中实现作业失败重试的方法。若要让作业不断重试直至成功,可抛出带特定标志的JobExecutionException。若要重试一定次数则更复杂,需使用StatefulJob并在JobDataMap中持有重试计数器,超过最大次数可禁用作业。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资料来源:

Automatically Retry Failed Jobs in Quartz

如果你想有一个不断尝试的作业,直到成功,你所要做的就是抛出一个带有一个标志的JobExecutionException,以便在调试程序失败时再次触发它.以下代码显示如何:

class MyJob implements Job {

public MyJob() {

}

public void execute(JobExecutionContext context) throws JobExecutionException {

try{

//connect to other application etc

}

catch(Exception e){

Thread.sleep(600000); //sleep for 10 mins

JobExecutionException e2 = new JobExecutionException(e);

//fire it again

e2.setRefireImmediately(true);

throw e2;

}

}

}

如果您想重试一定次数,会变得更复杂一些.您必须使用StatefulJob并在其JobDataMap中持有一个retryCounter,如果作业失败,则它会增加.如果计数器超过最大重试次数,那么您可以根据需要禁用该作业.

class MyJob implements StatefulJob {

public MyJob() {

}

public void execute(JobExecutionContext context) throws JobExecutionException {

JobDataMap dataMap = context.getJobDetail().getJobDataMap();

int count = dataMap.getIntValue("count");

// allow 5 retries

if(count >= 5){

JobExecutionException e = new JobExecutionException("Retries exceeded");

//make sure it doesn't run again

e.setUnscheduleAllTriggers(true);

throw e;

}

try{

//connect to other application etc

//reset counter back to 0

dataMap.putAsString("count", 0);

}

catch(Exception e){

count++;

dataMap.putAsString("count", count);

JobExecutionException e2 = new JobExecutionException(e);

Thread.sleep(600000); //sleep for 10 mins

//fire it again

e2.setRefireImmediately(true);

throw e2;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值