All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.robe.quartz.ManagedQuartz Maven / Gradle / Ivy

There is a newer version: 0.5.0.0-1039
Show newest version
package io.robe.quartz;

import com.google.common.collect.Sets;
import io.dropwizard.lifecycle.Managed;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashSet;
import java.util.Set;


public class ManagedQuartz implements Managed {
    private static final Logger LOGGER = LoggerFactory.getLogger(ManagedQuartz.class);
    private Set onStartJobs;
    private Set onStopJobs;

    public ManagedQuartz() {
        this.onStartJobs = new HashSet<>();
        this.onStopJobs = new HashSet<>();
    }

    public ManagedQuartz(Set onStartJobs, Set onStopJobs) {
        this.onStartJobs = onStartJobs;
        this.onStopJobs = onStopJobs;
    }

    @Override
    public void start() throws SchedulerException {
        scheduleAllJobsOnApplicationStart();
    }

    @Override
    public void stop() throws SchedulerException {
        scheduleAllJobsOnApplicationStop();

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            LOGGER.info("Finished onStop Jobs Shutting down the application.");
        }
        if (JobManager.getInstance() != null)
            JobManager.getInstance().shutdown(true);
    }

    private void scheduleAllJobsOnApplicationStop() throws SchedulerException {
        for (JobDetail detail : onStopJobs) {
            if (!JobManager.getInstance().checkExists(detail.getKey()))
                JobManager.getInstance().scheduleJob(detail, executeNowTrigger());
            else
                JobManager.getInstance().scheduleJob(detail, addNowTrigger(detail.getKey()), true);

        }
    }


    private void scheduleAllJobsOnApplicationStart() throws SchedulerException {
        LOGGER.info("Jobs to run on application start: " + onStartJobs);
        for (JobDetail detail : onStartJobs) {
            if (!JobManager.getInstance().checkExists(detail.getKey()))
                JobManager.getInstance().scheduleJob(detail, executeNowTrigger());
            else
                JobManager.getInstance().scheduleJob(detail, addNowTrigger(detail.getKey()), true);
        }
    }

    private Trigger executeNowTrigger() {
        return TriggerBuilder.newTrigger().startNow().build();
    }

    private Set addNowTrigger(JobKey key) throws SchedulerException {
        Set triggers = Sets.newHashSet(JobManager.getInstance().getTriggersOfJob(key.getName(), key.getGroup()));
        triggers.add(executeNowTrigger());
        return triggers;

    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy