首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跳过cron触发器的firetime

如何跳过cron触发器的firetime
EN

Stack Overflow用户
提问于 2011-05-28 01:22:24
回答 3查看 2K关注 0票数 0

我正在从远程主机上的目录传输文件,当此job.But的间隔到达时,触发器将触发作业。我希望确保当触发器触发时间到达时,如果作业仍在存储上工作(文件下载尚未完成),quartz将跳过此间隔。我尝试使用此c r on_trigger.MISFIRE_INSTRUCTION_DO_NOTHING,但我似乎只适用于没有可用线程的作业。

代码语言:javascript
复制
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;

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-28 01:45:30

创建一个跟踪某个下载作业是否正在运行的TriggerListener,然后返回true以否决另一个类型的作业的执行。

票数 2
EN

Stack Overflow用户

发布于 2018-10-09 14:38:11

我稍微修改了上面的代码,它起作用了。

代码语言:javascript
复制
/**
 * 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;
}
票数 1
EN

Stack Overflow用户

发布于 2011-05-30 19:41:10

我照你说的做了

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6155665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档