Monday, 29 July 2019

Quartz: mayFireAgain: Checks whether trigger fire again or not


‘org.quartz.Trigger’ interface provides mayFireAgain method, it returns true, if there is a chance for this trigger to fire again.

org.quartz.impl.triggers.SimpleTriggerImpl class implemented this method like below.

    public boolean mayFireAgain() {
        return (getNextFireTime() != null);
    }

As you see the above method definition, it checks next firing time of the trigger, if there is no next firing time, trigger will not fire again.

PrintJob.java
package com.sample.jobs;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class PrintJob implements Job {
 public void execute(JobExecutionContext jec) throws JobExecutionException {
  System.out.println("Printing.....");
  System.out.println("Is trigger fire again : " + jec.getTrigger().mayFireAgain());
 }
}


QuartzSchedulerEx.java
package com.sample.app;

import java.util.Date;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.SimpleTriggerImpl;

import com.sample.jobs.PrintJob;

public class QuartzSchedulerEx {
 public static void main(String args[]) throws SchedulerException, InterruptedException {

  // Initiate a Schedule Factory
  SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  // Retrieve a scheduler from schedule factory
  Scheduler scheduler = schedulerFactory.getScheduler();

  // Creating JobDetailImpl and link to our Job class
  JobDetailImpl printJobDetails = new JobDetailImpl();
  printJobDetails.setJobClass(PrintJob.class);
  printJobDetails.setName("PrintJob");
  printJobDetails.setGroup("PrintMessages");

  // Creating schedule time with trigger
  SimpleTriggerImpl trigger1 = new SimpleTriggerImpl();
  trigger1.setStartTime(new Date(System.currentTimeMillis() + 500));
  trigger1.setRepeatCount(2);
  trigger1.setRepeatInterval(3000);
  trigger1.setName("First Trigger");
  trigger1.setDescription("Job executes every 1 second");

  // Start scheduler
  scheduler.start();

  // Schedule the jobs using triggers
  scheduler.scheduleJob(printJobDetails, trigger1);
 }
}

Output
Printing.....
Is trigger fire again : true
Printing.....
Is trigger fire again : true
Printing.....
Is trigger fire again : false



Previous                                                    Next                                                    Home

No comments:

Post a Comment