package test;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
/**
* Quartz 工具类 <br>
* Date: 2016年6月22日 <br>
* Copyright (c) 2016 xyw10000@163.com <br>
*
* @author xuyw
*/
public class QuartzUtil {
private static SchedulerFactory schedulerFactory;
private static Scheduler scheduler =null;
static {
try {
schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 添加job
*/
public static void addJob(BaseJob job) {
try {
JobDetail jobDetail = JobBuilder.newJob(job.getClass())
.withIdentity(job.getJobName(), job.getGroupName()).build();
CronTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity(job.getJobName(), job.getGroupName())
.withSchedule(
CronScheduleBuilder.cronSchedule(job.getCron()))
.build();
scheduler.scheduleJob(jobDetail, trigger);
startJobs();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 更新job执行时间
*/
public static void modifyJobCron(BaseJob job) {
try {
String triggerName = job.getJobName();
String triggerGroupName = job.getGroupName();
TriggerKey triggerKey = new TriggerKey(triggerName,
triggerGroupName);
CronTrigger trigger = (CronTrigger) scheduler
.getTrigger(triggerKey);
if (trigger == null) {
return;
}
String oldCron = trigger.getCronExpression();
if (!oldCron.equalsIgnoreCase(job.getCron())) {
trigger = trigger
.getTriggerBuilder()
.withIdentity(triggerKey)
.withSchedule(
CronScheduleBuilder.cronSchedule(job.getCron()))
.build();
scheduler.rescheduleJob(triggerKey, trigger);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 暂停任务
*/
public static void pauseJob(BaseJob job) {
pauseJob(job.getJobName(), job.getGroupName());
}
/**
* 暂停任务
*/
public static void pauseJob(String jobName, String jobGroup) {
handleJobStatus(1, jobName, jobGroup);
}
/**
* 移除job
*/
public static void removeJob(BaseJob job) {
removeJob(job.getJobName(), job.getGroupName());
}
/**
* 移除job
*/
public static void removeJob(String jobName, String groupName) {
handleJobStatus(3, jobName, groupName);
}
/**
* 恢复job
*/
public static void recoverJob(BaseJob job) {
recoverJob(job.getJobName(), job.getGroupName());
}
/**
* 恢复job
*/
public static void recoverJob(String jobName, String groupName) {
handleJobStatus(2, jobName, groupName);
}
/**
* 处理job状态
*/
public static void handleJobStatus(int handleType, String jobName,
String groupName) {
JobKey jobKey = JobKey.jobKey(jobName, groupName);
try {
switch (handleType) {
case 1:
scheduler.pauseJob(jobKey);
break;
case 2:
scheduler.resumeJob(jobKey);
break;
case 3:
scheduler.deleteJob(jobKey);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startJobs() {
try {
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void shutDownJobs() {
try {
if (!scheduler.isShutdown()) {
scheduler.shutdown();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
String [] clas ={"test.TestJob2","test.TestJob"};
String [] crons ={"0/5 * * * * ?","0/1 * * * * ?"};
for(int i=0;i<clas.length;i++){
Class<?> newClass = Class.forName(clas[i]);
BaseJob job = (BaseJob) newClass.newInstance();
job.setCron(crons[i]);
QuartzUtil.addJob(job);
}
}
}
package test;
import java.util.UUID;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* BaseJob <br>
* Date: 2016年6月22日 <br>
* Copyright (c) 2016 xyw10000@163.com <br>
*
* @author xuyw
*/
public abstract class BaseJob implements Job {
private String jobName = UUID.randomUUID().toString().replaceAll("-", "");
private String groupName = UUID.randomUUID().toString().replaceAll("-", "");
private String cron = "0 30 10 ? * 6L 2015-2016";
/** 任务状态 0停用 1启用 2删除 */
private String jobStatus;
/** 任务描述 */
private String desc;
abstract void doJob(JobExecutionContext context);
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
doJob(context);
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getCron() {
return cron;
}
public void setCron(String cron) {
this.cron = cron;
}
public String getJobStatus() {
return jobStatus;
}
public void setJobStatus(String jobStatus) {
this.jobStatus = jobStatus;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package test;
import org.quartz.JobExecutionContext;
public class TestJob extends BaseJob {
@Override
void doJob(JobExecutionContext context) {
System.err.println("-------我是job1执行了-----------");
}
}