quartz 动态创建,控制管理任务

  一个效果图大概是这样的  


  



   不多说直接贴代码



  package com.efe.task.taskManager;


import java.util.List;


import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.CronScheduleBuilder.cronSchedule;


import com.efe.task.common.SpringUtils;
import com.efe.task.common.vo.ResponseEnum;
import com.efe.task.taskManager.service.TaskManagerService;
import com.efe.task.taskManager.vo.TaskRecord;


/**
 * @author wenzuhuang
 * @date 2018年5月15日--下午2:00:16
 * @company EFE
 * @project task
 * @description TODO
 */
@Component
public class TaskManager {
@Autowired
private TaskManagerService taskManagerService;
private static Logger logger = LoggerFactory.getLogger(TaskManager.class);
private Scheduler scheduler = null;
private static TaskManager taskManager;
private static Integer executeCount = 0;


public static TaskManager getTaskManagerInstance() {
if (null == taskManager) {
taskManager = new TaskManager();
return taskManager;
}
return taskManager;
}


private TaskManager() {
try {
scheduler = new StdSchedulerFactory().getScheduler();
logger.info("INIT_SCHDULER");
} catch (SchedulerException ex) {
logger.error("初始化调度器=> [失败]:" + ex.getLocalizedMessage());
}
}


// 初始化启动任务
public void initJob() {
if (executeCount == 1) {
return;
}
synchronized (executeCount) {
executeCount = 1;
}


TaskManagerService service = (TaskManagerService) SpringUtils
.getBean("taskManagerServiceImpl");
List<TaskRecord> jobs = service.getListByEntity(new TaskRecord());
for (TaskRecord job : jobs) {
if ("Y".equals(job.getIs_enabled())) {
this.addJob(job);
}
}
this.start();


}


public void start() {
try {
scheduler.start();
logger.info("START_SCHEDULER");
} catch (SchedulerException e) {
e.printStackTrace();
logger.error("启动调度器=> [失败]");
}
}


public void shutdown() {
try {
scheduler.shutdown();
logger.info("停止调度器 ");
System.out.println("停止调度器 ");
} catch (SchedulerException e) {
e.printStackTrace();
logger.error("停止调度器=> [失败]");
}
}


// 添加任务
public int addJob(TaskRecord task) {
try {
Class<? extends Job> jobClazz = null;
try {
jobClazz = Class.forName(task.getClazz()).asSubclass(Job.class);
} catch (Exception e) {


logger.error(task.getClazz() + "NO_IMPLJOB:E==" + e);


}
// 构造任务
JobDetail job = newJob(jobClazz).withIdentity(task.getName(),
task.getGroup_name()).build();
// 构造任务触发器
Trigger trg = newTrigger()
.withIdentity(task.getName(), task.getGroup_name())
.withSchedule(cronSchedule(task.getCron_expression()))
.build();


// 将作业添加到调度器
scheduler.scheduleJob(job, trg);
logger.info("CREATE_TASK=> [TASK_NAME:" + task.getName()
+ " TASK_GROUP:" + task.getGroup_name() + "] ");
return ResponseEnum.SUCCESS.getCode();
} catch (SchedulerException e) {
e.printStackTrace();
logger.error("CREATE_TASK=> [TASK_NAME:{},GROUP_NAME:{},RESULT:{}",
task.getName(), task.getGroup_name(), "FAILD");
return ResponseEnum.FAILD.getCode();
}
}


// 移除任务
public int removeJob(TaskRecord task) {
try {
TriggerKey tk = TriggerKey.triggerKey(task.getName(),
task.getGroup_name());
scheduler.pauseTrigger(tk);// 停止触发器
scheduler.unscheduleJob(tk);// 移除触发器
JobKey jobKey = JobKey.jobKey(task.getName(), task.getGroup_name());
scheduler.deleteJob(jobKey);// DELETE_JOBS
logger.info("DELETE_TASK=> TASK_NAME:" + task.getName()
+ " TASK_GROUP:" + task.getGroup_name() + "] ");
return ResponseEnum.SUCCESS.getCode();
} catch (SchedulerException e) {
e.printStackTrace();
logger.error("DELETE_TASK=> [" + task.getName() + " TASK_GROUP:"
+ task.getGroup_name() + "]=> [failed]");


return ResponseEnum.FAILD.getCode();
}


}


public int modifyJobTime(TaskRecord task) {

int removeJob = removeJob(task);

int addJob = addJob(task);
if(removeJob == ResponseEnum.SUCCESS.getCode() && addJob == ResponseEnum.SUCCESS.getCode()){
return ResponseEnum.SUCCESS.getCode();
}else{
return ResponseEnum.FAILD.getCode();
}
}


public static void main(String[] args) {
String name = "DynamicJobName";
String group = "DynamicJobGroup";
String cronExpression = "*/5 * * * * ?";
String className = "com.efe.task.taskManager.taskExecuteClass.TestJobs";
TaskRecord task = new TaskRecord();
task.setClazz(className);
task.setName(name);
task.setIs_enabled("Y");
task.setGroup_name(group);
task.setCron_expression(cronExpression);
TaskManager tManager = TaskManager.getTaskManagerInstance();
Class<? extends Job> jobClazz = null;
try {
jobClazz = Class.forName(className).asSubclass(Job.class);
} catch (Exception e) {
System.out.println(className + "没有继承job,e==" + e);
}
if (jobClazz == null) {
System.exit(0);
}
tManager.addJob(task);
tManager.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


task.setCron_expression("*/1 * * * * ?");
tManager.modifyJobTime(task);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


tManager.removeJob(task);
tManager.shutdown();
}


}



然后你就可以通过控制层来写一些接口来跟页面交互,数据主要是存在数据库的。