Home > Mobile >  Is there are way for CronTriggerImpl to get how many times it have been triggered
Is there are way for CronTriggerImpl to get how many times it have been triggered

Time:04-22

we can use SimpleTrigger getTimesTriggered to know how many times this schedule have been triggered, for CronTriggerImpl, is there a similar way to achieve this?

CodePudding user response:

for CronTriggerImpl, is there a similar way to achieve this?

TLDR no.

But you can implement JobListener and register it with your scheduler like this:

scheduler.getListenerManager().addJobListener(myJobListener);

That way, you will be notified everytime job started and finished. You can retrieve Trigger instance from JobExecutionContext

Or similarly you can do with TriggerListener

scheduler.getListenerManager().addTriggerListener(myTriggerListener);

CodePudding user response:

Here is an example program based on @rkosegi suggestion.
Using org.quartz.TriggerListener or org.quartz.JobListener

ByeJob.java

public class ByeJob implements Job {

    private ByeService bs = new ByeService();

    public void execute(JobExecutionContext context) throws JobExecutionException {
        bs.sayGoodbye();
    }
}

ByeService.java

    public class ByeService {
    
        public void sayGoodbye() {
            System.out.println("Testing "   new Date());
        }
    }

Using GlobalJobListner.java

public class GlobalJobListner implements JobListener {

    private static final String TRIGGER_LISTENER_NAME = "GlobalJobListner";
    AtomicInteger count = new AtomicInteger(0);

    @Override
    public String getName() {
        return TRIGGER_LISTENER_NAME;
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
    String triggerName = context.getTrigger().getKey().toString();
    String jobName = context.getJobDetail().getKey().toString();
    count.incrementAndGet();
    System.out.println("trigger : "   triggerName   " is fired and "   "total count="   count.get());
    System.out.println("job : "   jobName   " is fired and "   "total count="   count.get());

    }
.....................
}

or Using GlobalTriggerListener.java

    public class GlobalTriggerListener implements TriggerListener {
    
        private static final String TRIGGER_LISTENER_NAME = "GlobalTriggerListener";
        AtomicInteger count = new AtomicInteger(0);
    
        @Override
        public String getName() {
            return TRIGGER_LISTENER_NAME;
        }
    
        @Override
        public void triggerFired(Trigger trigger, JobExecutionContext context) {
            String triggerName = context.getTrigger().getKey().toString();
        String jobName = context.getJobDetail().getKey().toString();
        count.incrementAndGet();
        System.out.println("trigger : "   triggerName   " is fired and "   "total count="   count.get());
        System.out.println("job : "   jobName   " is fired and "   "total count="   count.get());
}
    ................
    }

Verify

public class Tester {

    public static void main(String[] args) {

        try {
            JobDetail job = JobBuilder.newJob(ByeJob.class).withIdentity("byeJob", "group1").build();
            CronTriggerImpl trigger = new CronTriggerImpl();
            trigger.setName("T1");
            trigger.setCronExpression("0/5 * * * * ?");

            Scheduler scheduler2 = new StdSchedulerFactory().getScheduler();

            // register global trigger
            scheduler2.getListenerManager().addTriggerListener(new GlobalTriggerListener());

            // register global listner
            scheduler2.getListenerManager().addJobListener(new GlobalJobListner());

            scheduler2.start();
            scheduler2.scheduleJob(job, trigger);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Output:

13:46:43.402 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
13:46:43.408 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
13:46:45.004 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.byeJob', class=com.example.demo.ByeJob
trigger : DEFAULT.T1 is fired and total count=1
job : group1.byeJob is fired and total count=1
trigger : DEFAULT.T1 is fired and total count=1
job : group1.byeJob is fired and total count=1
13:46:45.009 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
13:46:45.009 [DefaultQuartzScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.byeJob
Testing Fri Apr 22 13:46:45 IST 2022
13:46:50.002 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.byeJob', class=com.example.demo.ByeJob
13:46:50.003 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
trigger : DEFAULT.T1 is fired and total count=2
job : group1.byeJob is fired and total count=2
trigger : DEFAULT.T1 is fired and total count=2
job : group1.byeJob is fired and total count=2
13:46:50.003 [DefaultQuartzScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.byeJob
Testing Fri Apr 22 13:46:50 IST 2022
13:46:55.003 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.byeJob', class=com.example.demo.ByeJob
trigger : DEFAULT.T1 is fired and total count=3
job : group1.byeJob is fired and total count=3
trigger : DEFAULT.T1 is fired and total count=3
job : group1.byeJob is fired and total count=3
  • Related