
com.app.common.utils.Schedule Maven / Gradle / Ivy
package com.app.common.utils;
import org.quartz.CronScheduleBuilder;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Schedule {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Scheduler scheduler = null;
public void init(String sfile) {
try {
StdSchedulerFactory sf = new StdSchedulerFactory(sfile);
scheduler = sf.getScheduler();
} catch (Exception e) {
logger.error("can't create quartz Scheduler with file: " + sfile);
}
}
public void start() {
try {
scheduler.start();
} catch (SchedulerException e) {
logger.error("Scheduler Error", e);
}
}
public void stop() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
logger.error("Scheduler Error", e);
}
}
public void deleteJob(String type,Class extends Job> job) {
String name = job.getSimpleName()+"_"+type;
JobKey jobKey = new JobKey(name, name);
TriggerKey tk = new TriggerKey(name, name);
try {
if (scheduler.checkExists(jobKey) && scheduler.checkExists(tk)) {
scheduler.deleteJob(jobKey);
}
} catch (Exception e) {
logger.error("", e);
}
}
public void updateJob(String cron, String type,Class extends Job> job,Object... paras) {
String name = job.getSimpleName()+"_"+type;
JobKey jobKey = new JobKey(name, name);
TriggerKey tk = new TriggerKey(name, name);
logger.info("job cron:{} {} {}.", cron,
job.getSimpleName(),paras);
try {
if (scheduler.checkExists(jobKey) && scheduler.checkExists(tk)) {
JobDetail jd = scheduler.getJobDetail(jobKey);
Trigger trigh = scheduler.getTrigger(tk);
jd.getJobDataMap().clear();
jd.getJobDataMap().put("Object", paras);
scheduler.deleteJob(jobKey);
if (trigh instanceof CronTriggerImpl) {
CronTriggerImpl cronTrig = (CronTriggerImpl) trigh;
cronTrig.setCronExpression(cron);
scheduler.scheduleJob(jd, cronTrig);
}
} else {
JobDetail jobDetail = JobBuilder.newJob(job)
.withIdentity(new JobKey(name, name)).build();
jobDetail.getJobDataMap().put("Object", paras);
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(new TriggerKey(name, name))
.forJob(jobDetail.getKey())
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
} catch (Exception e) {
logger.error("", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy