简体   繁体   中英

Schedule a job in quartz with a set of triggers

I am using quartz 2.2 and I want to schedule a job with a set of triggers. I plan to use the following method.

void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggers, boolean replace)

My question is, how do I create a Set that takes in a class that extends Trigger ? TriggerBuilder returns only the Trigger , but I can't put the same in the set. I searched the API but could not find a solution.

Thanks

The simplest way (probably not the cleanest one) in plain Java is to do the following:

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<>();
    triggers.add(new SimpleTriggerImpl());
    triggers.add(new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

Or if you are not using Java 7:

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<Trigger>();
    triggers.add(new SimpleTriggerImpl());
    triggers.add(new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<JobDetail, Set<? extends Trigger>>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

A shorter version with Guava:

    QuartzScheduler quartzScheduler = ...

    Set<? extends Trigger> set = Sets.newHashSet(new SimpleTriggerImpl(), new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = Maps.newHashMap();
    triggersAndJobs.put(new JobDetailImpl(), set);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

Update . Using TriggerBuilder in fact doesn't change much. TriggerBuilder.build() returns a trigger instance which can be referenced just as Trigger .

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<Trigger>();

    Trigger trigger1 = newTrigger()
            .withIdentity(triggerKey("myTrigger", "myTriggerGroup"))
            .withSchedule(simpleSchedule()
                    .withIntervalInHours(1)
                    .repeatForever())
            .startAt(futureDate(10, DateBuilder.IntervalUnit.MINUTE))
            .build();
    triggers.add(trigger1);

    Trigger trigger2 = newTrigger() ...
    triggers.add(trigger2);

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<JobDetail, Set<? extends Trigger>>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM