ishwar
ishwar

Reputation: 444

java Quartz2 cron trigger is not firing immediately

I need to execute scheduler immediately when I will call the scheduler and next time it will execute base on the cron expression. But here my code which is only executing after 10 minute but not executing when I run this class/application.

QuartzConfigure.java for registering and calling the execute method:

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 for job:

public class QuartzSchduleJob implements Job {

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

Upvotes: 0

Views: 1525

Answers (1)

Kraiss
Kraiss

Reputation: 999

With your current code, your 'scheduler' starts immediatly after sch.start(), so I am guessing you want to know how force your Job to trigger when your 'scheduler' starts.

If so, you can not achieve this with only a cron expression but I have two solutions for you.

  1. If you want your Job to be trigger at start and then every ten minutes after, consider using a SimpleScheduleBuilder. In your code, replace the CronExpressionSchedule :

    Trigger trigger = TriggerBuilder.newTrigger()
                          .withIdentity("trigger1", "Group2")
                          .withSchedule(ScheduleBuilder.simpleSchedule()
                              .withIntervalInMinutes(10)
                              .repeatForever())
                          .startNow()
                          .build();
    
  2. If you want your Job to trigger at start and then fires on a scheduling based on your Cron expression. Consider using a second trigger :

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

Upvotes: 1

Related Questions