Quartz SimpleTrigger没有触发

时间:2014-09-11 16:37:25

标签: java triggers cron quartz-scheduler

我在与Quartz的触发器挣扎。我创建了一个通过cron表达式调用的服务,但它也是一个org.quartz.Job本身,这背后的想法是,一旦调用了服务,我检查一些变量并根据我的决定延迟(或不延迟)服务的执行1天;为此,我得到了DefaultScheduler,创建了一个新的org.quartz.JobDetail和一个org.quartz.SimpleTrigger,并安排了它们。正如你可能猜到的那样,它不起作用,新的触发器永远不会开始。

public class MyService implements MyInterface, org.quartz.Job {

    @Override
    //method declared in MyInterface
    public void generateFile() {
        org.quartz.Scheduler scheduler;
        try {
            scheduler = org.quartz.impl.StdSchedulerFactory.getDefaultScheduler();
        } catch (SchedulerException e1) {
            scheduler = null;
        }
        if (condition) {
            //regular processing
        } else {
            try {  
                    org.quartz.JobDetail jobDetail;
                    SimpleTrigger simpleTrigger;
                    String name = "jobName";
                    if (scheduler != null && scheduler.isInStandbyMode()){
                        jobDetail = new org.quartz.JobDetail(name, org.quartz.Scheduler.DEFAULT_GROUP, MyService.class);  
                        jobDetail.getJobDataMap().put("myService", this);                       
                        Calendar c = Calendar.getInstance();
                        int date = c.get(Calendar.DATE);
                        c.set(Calendar.DATE, date + 1);
                        simpleTrigger = new SimpleTrigger("simpleTrig", c.getTime());
                        simpleTrigger.setJobName(name);

                        jobDetail.setDurability(true);
                        scheduler.addJob(jobDetail, true);

                        scheduler.scheduleJob(simpleTrigger);
                        //also tested with 
                        //scheduler.scheduleJob(jobDetail, simpleTrigger);
                        //and same result
                        scheduler.start();
                    }
                    else{
                        scheduler.shutdown();
                    }
                } catch (java.text.ParseException e) {  
                } 
                catch (org.quartz.SchedulerException ex) {  
                }
        }
    }

    @Override
    public void execute(JobExecutionContext jobContext) throws JobExecutionException {
        MyInterface jobParamLogService = (MyInterface)jobContext.getJobDetail().getJobDataMap().get("myService");
        jobParamLogService.generateFile();
    }

正如我所说的,我的问题是SimpleTrigger永远不会被调用(当然,我已经测试过添加几分钟,而不是一天),是否有关于什么'继续?
任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

正如@GuillaumePolet建议的那样,我已尝试删除isInStandByMode条件,但仍无法正常工作。诀窍是用默认值(空)的参数替换构造函数,并通过setter方法设置变量。
感谢大家的帮助,亲切的问候