Dynamically scheduling jobs: using cron trigger in

2020-08-02 07:34发布

问题:

I am still playing around with quartz scheduler.I created the below job using grails create-job ,what i am trying to do here is simple, that is create a trigger and try to run the execute method.once this basic code runs i want to create multiple triggers each with different cron schedule value, inside a for loop(multiple triggers with different execution time) and run the execute method and do sched.scheduleJob(triggerName) over list of these triggers

import org.quartz.*
import org.quartz.Trigger
import static org.quartz.JobBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
public class TrialJob 
{
    public static void main(String[] args)
    {
       JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity("dummyJobName1","group11").build();

       CronTrigger trigger = newTrigger().withIdentity("trigger","group1").withSchedule(cronSchedule("0 55 15 * * ?")).build();

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

       scheduler.scheduleJob(job,trigger);

       scheduler.start();

       //while(true){};
    }    

    public static class TestJob implements Job 
    { 
       public void execute(JobExecutionContext context) throws JobExecutionException 
       {
           println "inside execute "
       }        
    }
}

回答1:

First of all the code provided doesn't compile. There's an attempt of assigning instance of class org.quartz.impl.StdSchedulerFactory to a variable declared as org.quartz.Scheduler.

Secondly the program runs well and the job is scheduled but the it exists before any output is caught. To prove it run below example with uncommented //while(true){}; line. The example is taken from here.

@Grab(group='org.quartz-scheduler', module='quartz', version='2.2.1') 

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class CronTriggerExample {
    public static void main( String[] args ) throws Exception {
        JobDetail job = JobBuilder.newJob(HelloJob.class)
        .withIdentity("dummyJobName1", "group11").build();

        Trigger trigger = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName1", "group11")
        .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();


        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger); 

        //while(true){};
    }
}

public class HelloJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Hello Quartz!");    
    }
}

Hope that helped you.