gpt4 book ai didi

java - Quartz 阻止 jobToBeExecuted 上的作业执行

转载 作者:行者123 更新时间:2023-12-01 09:09:45 25 4
gpt4 key购买 nike

我的目标是创建一个队列系统,我可以在其中指定每个组的最大并发作业数,即对于 A 组,最多应同时运行 3 个作业,对于 B 组,最多应同时运行 Y 个作业,等等。这些作业可以都按 cron 计划执行,并且仅使用 SimpleTrigger 执行一次,因此我无法在调度作业时检查队列,我必须在执行之前或执行期间检查它。我正在实现一个 joblistener,并试图阻止 jobToBeExecuted() 方法中的执行。我尝试过 Scheduler.interrupt() 但当作业尚未开始时它不起作用。 Scheduler.deletejob() 和 Scheduler.unschedule() 也没有阻止它执行。

有什么想法吗?

public class JobQueueListener implements JobListener {

@Override
public void jobToBeExecuted(JobExecutionContext context) {
JobKey currentJobKey = context.getJobDetail().getKey();
JobDetail jobDetail = context.getJobDetail();
Scheduler scheduler = context.getScheduler();

if (shouldBePutInQueue(currentJobKey)) {
/// Prevent execution and put in queue here, but how?
}
}

@Override
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
//Check queue and execute next in queue
}

}

最佳答案

你能看看TriggerListener

您应该实现 TriggerListener 并在“vetoJobExecution”方法中包含中止逻辑。

boolean vetoJobExecution(Trigger trigger,
JobExecutionContext context)

Its Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed. If the implementation vetos the execution (via returning true), the job's execute method will not be called.

关于java - Quartz 阻止 jobToBeExecuted 上的作业执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991187/

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