Skip to content

Instantly share code, notes, and snippets.

@greycode
Created August 23, 2014 06:12
Show Gist options
  • Save greycode/d76eab0d989f473b73f3 to your computer and use it in GitHub Desktop.
Save greycode/d76eab0d989f473b73f3 to your computer and use it in GitHub Desktop.
quartz 手动处理job
package pkgName;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import pkgName.frame.base.BaseCtrl;
import pkgName.frame.base.GlobalParas;
import pkgName.xx.batch.vo.ScheduleJob;
import pkgName.xx.common.SpringContextUtil;
import pkgName.xx.common.StringUtils;
@Controller
@RequestMapping(value = "/batch")
@SuppressWarnings("unchecked")
public class BatchMgtCtrl extends BaseCtrl {
SchedulerFactoryBean schedulerFactoryBean;
@RequestMapping(value="/job/list.go")
public String getAllJobs (HttpServletRequest request , HttpServletResponse response) {
Map<String, Object> paramMap = getParamMap(request);
initEcSide(paramMap, request, GlobalParas.PAGE_SIZE10);
try {
schedulerFactoryBean = SpringContextUtil.getBean(SchedulerFactoryBean.class);
Scheduler scheduler = schedulerFactoryBean.getScheduler();
GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
for (JobKey jobKey : jobKeys) {
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
for (Trigger trigger : triggers) {
ScheduleJob job = new ScheduleJob();
job.setJobName(jobKey.getName());
job.setJobGroup(jobKey.getGroup());
job.setDesc(trigger.getDescription());
job.setPrevFireTime( trigger.getPreviousFireTime());
job.setNextFireTime( trigger.getNextFireTime());
job.setTriggerName(trigger.getKey().getName());
job.setTriggerGroup(trigger.getKey().getGroup());
/**
* NONE : Trigger已经完成,且不会在执行,或者找不到该触发器,或者Trigger已经被删除
* NORMAL : 正常状态
* PAUSED : 暂停状态
* COMPLETE : 触发器完成,但是任务可能还正在执行中
* BLOCKED : 线程阻塞状态
* ERROR : 出现错误
* */
Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
job.setJobStatus(triggerState.name());
if (trigger instanceof CronTrigger) {
CronTrigger cronTrigger = (CronTrigger) trigger;
String cronExpression = cronTrigger.getCronExpression();
job.setCronExpression(cronExpression);
}
job.setTotalNums(jobKeys.size());
jobList.add(job);
}
}
setTotalRows(jobList, request, GlobalParas.PAGE_SIZE10);
request.setAttribute("list", jobList);
} catch (Exception ex) {
logger.error("BatchMgtCtrl.getAllJobs:" + ex.getMessage());
}
return "xx/batch/JobMgtContent";
}
@RequestMapping(value="/job/pause.go")
@ResponseBody
public String pauseJob (HttpServletRequest request , HttpServletResponse response) {
Map<String, Object> paramMap = getParamMap(request);
String jobName = StringUtils.val(paramMap.get("jobName"));
String jobGroup = StringUtils.val(paramMap.get("jobGroup"));
try {
schedulerFactoryBean = SpringContextUtil.getBean(SchedulerFactoryBean.class);
Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
scheduler.pauseJob(jobKey);
return "1";
} catch (Exception e) {
logger.error("BatchMgtCtrl.pauseJob:" + jobName + "@" + jobGroup);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return e.getMessage();
}
}
@RequestMapping(value="/job/trigger.go")
@ResponseBody
public String execJob (HttpServletRequest request , HttpServletResponse response) {
Map<String, Object> paramMap = getParamMap(request);
String jobName = StringUtils.val(paramMap.get("jobName"));
String jobGroup = StringUtils.val(paramMap.get("jobGroup"));
try {
schedulerFactoryBean = SpringContextUtil.getBean(SchedulerFactoryBean.class);
Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
scheduler.triggerJob(jobKey);
return "1";
} catch (Exception e) {
logger.error("BatchMgtCtrl.triggerJob:" + jobName + "@" + jobGroup);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return e.getMessage();
}
}
@RequestMapping(value="/job/resume.go")
@ResponseBody
public String resumeJob (HttpServletRequest request , HttpServletResponse response) {
Map<String, Object> paramMap = getParamMap(request);
String jobName = StringUtils.val(paramMap.get("jobName"));
String jobGroup = StringUtils.val(paramMap.get("jobGroup"));
try {
schedulerFactoryBean = SpringContextUtil.getBean(SchedulerFactoryBean.class);
Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
scheduler.resumeJob(jobKey);
return "1";
} catch (Exception e) {
logger.error("BatchMgtCtrl.resumeJob:" + jobName + "@" + jobGroup);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return e.getMessage();
}
}
@RequestMapping(value="/job/update.go")
@ResponseBody
public String updateJob (HttpServletRequest request , HttpServletResponse response) {
Map<String, Object> paramMap = getParamMap(request);
String triggerName = StringUtils.val(paramMap.get("triggerName"));
String triggerGroup = StringUtils.val(paramMap.get("triggerGroup"));
String cronTime = StringUtils.val(paramMap.get("cronTime"));
try {
schedulerFactoryBean = SpringContextUtil.getBean(SchedulerFactoryBean.class);
Scheduler scheduler = schedulerFactoryBean.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
//获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronTime);
//按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
.withSchedule(scheduleBuilder).build();
//按新的trigger重新设置job执行
scheduler.rescheduleJob(triggerKey, trigger);
return "1";
} catch (Exception e) {
logger.error("BatchMgtCtrl.updateJob:" + triggerName + "@" + triggerGroup);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return e.getMessage();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment