Created
August 23, 2014 06:12
-
-
Save greycode/d76eab0d989f473b73f3 to your computer and use it in GitHub Desktop.
quartz 手动处理job
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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