/**
*
*/
package com.vip.saturn.job.trigger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import com.vip.saturn.job.basic.AbstractElasticJob;
/**
* @author chembo.huang
*
*/
public class SaturnScheduler {
private static final String SATURN_QUARTZ_WORKER = "-saturnQuartz-worker";
private final AbstractElasticJob job;
private Trigger trigger;
private final ExecutorService executor;
private SaturnWorker saturnQuartzWorker;
public SaturnScheduler(final AbstractElasticJob job, final Trigger trigger) {
this.job = job;
this.trigger = trigger;
executor = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, job.getExecutorName()+"_"+job.getConfigService().getJobName() + SATURN_QUARTZ_WORKER);
if (t.isDaemon()) {
t.setDaemon(false);
}
if (t.getPriority() != Thread.NORM_PRIORITY) {
t.setPriority(Thread.NORM_PRIORITY);
}
return t;
}
});
}
public void start() throws SchedulerException {
saturnQuartzWorker = new SaturnWorker(job, trigger);
executor.submit(saturnQuartzWorker);
}
public Trigger getTrigger() {
return trigger;
}
public void shutdown() {
saturnQuartzWorker.halt();
executor.shutdown();
}
public void triggerJob() {
saturnQuartzWorker.trigger();
}
public boolean isShutdown() {
return saturnQuartzWorker.isShutDown();
}
public void rescheduleJob(Trigger createTrigger) throws SchedulerException {
this.trigger = createTrigger;
saturnQuartzWorker.reInitTrigger(createTrigger);
}
}