我正在从远程主机上的目录传输文件,当此job.But的间隔到达时,触发器将触发作业。我希望确保当触发器触发时间到达时,如果作业仍在存储上工作(文件下载尚未完成),quartz将跳过此间隔。我尝试使用此c r on_trigger.MISFIRE_INSTRUCTION_DO_NOTHING,但我似乎只适用于没有可用线程的作业。
public CronTrigger scheduleJob(RemoteJob job, String cronExpression,Date firstFireTime) throws SchedulerException, ParseException {
JobDetail jobDetail = new JobDetail(job.getDescription(), job.getName(), job.getClass());
CronTrigger crTrigger = new CronTrigger(
"cronTrigger", job.getName(), cronExpression);
scheduler.scheduleJob(jobDetail, crTrigger);
crTrigger.setStartTime(firstFireTime);
crTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
return crTrigger;
}发布于 2011-05-28 01:45:30
创建一个跟踪某个下载作业是否正在运行的TriggerListener,然后返回true以否决另一个类型的作业的执行。
发布于 2018-10-09 14:38:11
我稍微修改了上面的代码,它起作用了。
/**
* not for cluster
*/
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
try {
List<JobExecutionContext> currentlyExecutingJobs = context.getScheduler().getCurrentlyExecutingJobs();
for (JobExecutionContext jobContext : currentlyExecutingJobs) {
if (jobContext.getTrigger().equals(trigger) &&
jobContext.getJobDetail().getKey().equals(trigger.getJobKey())) {
return true;
}
}
} catch (SchedulerException ex) {
return true;
}
return false;
}发布于 2011-05-30 19:41:10
我照你说的做了
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
try {
List<JobExecutionContext> jobs =
context.getScheduler().getCurrentlyExecutingJobs();
for (JobExecutionContext job : jobs) {
if (job.getTrigger().equals(context.getTrigger()) &&
!job.getJobInstance().equals(this)) {
_logger.info("There's another instance running,So job discarded " + context.getJobDetail().getGroup()+ ":"+context.getJobDetail().getName());
return true;
}
}
} catch (SchedulerException ex) {
return true;
}
return false;
}https://stackoverflow.com/questions/6155665
复制相似问题