java Quartz2 cron触发器不会立即触发

时间:2014-09-15 08:09:09

标签: java quartz-scheduler crontrigger

我需要在调用调度程序时立即执行调度程序,下次它将基于cron表达式执行。但是这里我的代码只在10分钟后执行,但在我运行这个类/应用程序时没有执行。

QuartzConfigure.java 用于注册和调用execute方法:

public class QuartzConfigure {

    public static void main(String args[]) throws Exception {
        // specify the job' s details..
        JobDetail job = JobBuilder.newJob(QuartzSchduleJob.class)
                                  .withIdentity("testJob")
                                  .build();

        //this is specify using chron expression using chrone expression
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("Group2")
            .withSchedule(CronScheduleBuilder.cronSchedule("0 /10 * * * ?"))
            .startNow().build();

        //schedule the job
        SchedulerFactory schFactory = new StdSchedulerFactory();
        Scheduler sch = schFactory.getScheduler();
        sch.start();
        sch.scheduleJob(job, trigger);
    }
}
工作的

QuartzSchduleJob.java

public class QuartzSchduleJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {        
         System.out.println("calling jobSchedulling::"+System.currentTimeMillis());     
    }    
}

1 个答案:

答案 0 :(得分:1)

使用您当前的代码,您的'日程安排程序'在sch.start()之后立即开始,所以我猜你想要了解当你的调度员'启动。

如果是这样,你只能使用cron表达式来达到这个目的,但我有两个解决方案。

  1. 如果您希望在开始时触发作业,然后每隔十分钟触发一次,请考虑使用SimpleScheduleBuilder。在您的代码中,替换CronExpressionSchedule

    Trigger trigger = TriggerBuilder.newTrigger()
                          .withIdentity("trigger1", "Group2")
                          .withSchedule(ScheduleBuilder.simpleSchedule()
                              .withIntervalInMinutes(10)
                              .repeatForever())
                          .startNow()
                          .build();
    
  2. 如果您希望Job在启动时触发,然后根据您的Cron表达式触发计划。考虑使用第二个触发器:

    [...]
    Trigger trigger2 = TriggerBuilder.newTrigger()
                           .withIdentity("trigger2", "Group2")
                           .withSchedule(ScheduleBuilder.simpleSchedule())
                           .startNow()
                           .build();
    [...]
    sch.start();
    sch.scheduleJob(job, trigger);
    sch.scheduleJob(job, trigger2);