gpt4 book ai didi

java - Quartz 失败时重试

转载 作者:IT老高 更新时间:2023-10-28 20:46:37 26 4
gpt4 key购买 nike

假设我有一个这样配置的触发器:

<bean id="updateInsBBTrigger"         
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="updateInsBBJobDetail"/>
<!-- run every morning at 5 AM -->
<property name="cronExpression" value="0 0 5 * * ?"/>
</bean>

触发器必须与另一个应用程序连接,如果出现任何问题(如连接失败),它应该每 10 分钟重试该任务最多五次或直到成功。有什么方法可以将触发器配置为这样工作?

最佳答案

我会推荐一个像这样的实现来在失败后恢复工作:

final JobDataMap jobDataMap = jobCtx.getJobDetail().getJobDataMap();
// the keys doesn't exist on first retry
final int retries = jobDataMap.containsKey(COUNT_MAP_KEY) ? jobDataMap.getIntValue(COUNT_MAP_KEY) : 0;

// to stop after awhile
if (retries < MAX_RETRIES) {
log.warn("Retry job " + jobCtx.getJobDetail());

// increment the number of retries
jobDataMap.put(COUNT_MAP_KEY, retries + 1);

final JobDetail job = jobCtx
.getJobDetail()
.getJobBuilder()
// to track the number of retries
.withIdentity(jobCtx.getJobDetail().getKey().getName() + " - " + retries, "FailingJobsGroup")
.usingJobData(jobDataMap)
.build();

final OperableTrigger trigger = (OperableTrigger) TriggerBuilder
.newTrigger()
.forJob(job)
// trying to reduce back pressure, you can use another algorithm
.startAt(new Date(jobCtx.getFireTime().getTime() + (retries*100)))
.build();

try {
// schedule another job to avoid blocking threads
jobCtx.getScheduler().scheduleJob(job, trigger);
} catch (SchedulerException e) {
log.error("Error creating job");
throw new JobExecutionException(e);
}
}

为什么?

  1. 它不会阻止 Quartz Workers
  2. 它将避免背压。使用 setRefireImmediately,作业将立即被解雇,这可能会导致背压问题

关于java - Quartz 失败时重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4408858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com